mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-02 13:02:24 +08:00
Merge remote-tracking branch 'refs/remotes/origin/master'
This commit is contained in:
@ -409,6 +409,11 @@ class Request extends \yii\base\Request
|
||||
return $this->_pathInfo;
|
||||
}
|
||||
|
||||
public function setPathInfo($value)
|
||||
{
|
||||
$this->_pathInfo = trim($value, '/');
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves the path info part of the currently requested URL.
|
||||
* A path info refers to the part that is after the entry script and before the question mark (query string).
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
namespace yii\web;
|
||||
|
||||
use Yii;
|
||||
use \yii\base\Component;
|
||||
use yii\base\Component;
|
||||
|
||||
/**
|
||||
* UrlManager handles HTTP request parsing and creation of URLs based on a set of rules.
|
||||
@ -141,8 +141,11 @@ class UrlManager extends Component
|
||||
|
||||
return array($pathInfo, array());
|
||||
} else {
|
||||
$route = (string)$request->getParam($this->routeVar);
|
||||
return array($route, array());
|
||||
$route = $request->getParam($this->routeVar);
|
||||
if (is_array($route)) {
|
||||
$route = '';
|
||||
}
|
||||
return array((string)$route, array());
|
||||
}
|
||||
}
|
||||
|
||||
@ -230,9 +233,7 @@ class UrlManager extends Component
|
||||
public function getHostInfo()
|
||||
{
|
||||
if ($this->_hostInfo === null) {
|
||||
/** @var $request \yii\web\Request */
|
||||
$request = Yii::$app->getRequest();
|
||||
$this->_hostInfo = $request->getHostInfo();
|
||||
$this->_hostInfo = Yii::$app->getRequest()->getHostInfo();
|
||||
}
|
||||
return $this->_hostInfo;
|
||||
}
|
||||
|
||||
@ -1,14 +1,13 @@
|
||||
<?php
|
||||
namespace yiiunit\framework\web;
|
||||
|
||||
use yii\web\Application;
|
||||
use yii\web\Request;
|
||||
use yii\web\UrlManager;
|
||||
|
||||
class UrlManagerTest extends \yiiunit\TestCase
|
||||
{
|
||||
public function testCreateUrl()
|
||||
{
|
||||
new Application('test', __DIR__ . '/../..');
|
||||
// default setting with '/' as base url
|
||||
$manager = new UrlManager(array(
|
||||
'baseUrl' => '/',
|
||||
@ -50,6 +49,7 @@ class UrlManagerTest extends \yiiunit\TestCase
|
||||
// pretty URL with rules
|
||||
$manager = new UrlManager(array(
|
||||
'enablePrettyUrl' => true,
|
||||
'cacheID' => false,
|
||||
'rules' => array(
|
||||
array(
|
||||
'pattern' => 'post/<id>/<title>',
|
||||
@ -66,6 +66,7 @@ class UrlManagerTest extends \yiiunit\TestCase
|
||||
// pretty URL with rules and suffix
|
||||
$manager = new UrlManager(array(
|
||||
'enablePrettyUrl' => true,
|
||||
'cacheID' => false,
|
||||
'rules' => array(
|
||||
array(
|
||||
'pattern' => 'post/<id>/<title>',
|
||||
@ -83,11 +84,118 @@ class UrlManagerTest extends \yiiunit\TestCase
|
||||
|
||||
public function testCreateAbsoluteUrl()
|
||||
{
|
||||
|
||||
$manager = new UrlManager(array(
|
||||
'baseUrl' => '/',
|
||||
'hostInfo' => 'http://www.example.com',
|
||||
));
|
||||
$url = $manager->createAbsoluteUrl('post/view', array('id' => 1, 'title' => 'sample post'));
|
||||
$this->assertEquals('http://www.example.com/?r=post/view&id=1&title=sample+post', $url);
|
||||
}
|
||||
|
||||
public function testParseRequest()
|
||||
{
|
||||
$manager = new UrlManager;
|
||||
$request = new Request;
|
||||
|
||||
// default setting without 'r' param
|
||||
unset($_GET['r']);
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('', array()), $result);
|
||||
|
||||
// default setting with 'r' param
|
||||
$_GET['r'] = 'site/index';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('site/index', array()), $result);
|
||||
|
||||
// default setting with 'r' param as an array
|
||||
$_GET['r'] = array('site/index');
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('', array()), $result);
|
||||
|
||||
// pretty URL without rules
|
||||
$manager = new UrlManager(array(
|
||||
'enablePrettyUrl' => true,
|
||||
));
|
||||
// empty pathinfo
|
||||
$request->pathInfo = '';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('', array()), $result);
|
||||
// normal pathinfo
|
||||
$request->pathInfo = 'site/index';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('site/index', array()), $result);
|
||||
// pathinfo with module
|
||||
$request->pathInfo = 'module/site/index';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('module/site/index', array()), $result);
|
||||
// pathinfo with trailing slashes
|
||||
$request->pathInfo = 'module/site/index/';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('module/site/index', array()), $result);
|
||||
|
||||
// pretty URL rules
|
||||
$manager = new UrlManager(array(
|
||||
'enablePrettyUrl' => true,
|
||||
'cacheID' => false,
|
||||
'rules' => array(
|
||||
array(
|
||||
'pattern' => 'post/<id>/<title>',
|
||||
'route' => 'post/view',
|
||||
),
|
||||
),
|
||||
));
|
||||
// matching pathinfo
|
||||
$request->pathInfo = 'post/123/this+is+sample';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('post/view', array('id' => '123', 'title' => 'this+is+sample')), $result);
|
||||
// matching pathinfo with trailing slashes
|
||||
$request->pathInfo = 'post/123/this+is+sample/';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('post/view', array('id' => '123', 'title' => 'this+is+sample')), $result);
|
||||
// empty pathinfo
|
||||
$request->pathInfo = '';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('', array()), $result);
|
||||
// normal pathinfo
|
||||
$request->pathInfo = 'site/index';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('site/index', array()), $result);
|
||||
// pathinfo with module
|
||||
$request->pathInfo = 'module/site/index';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('module/site/index', array()), $result);
|
||||
|
||||
// pretty URL rules
|
||||
$manager = new UrlManager(array(
|
||||
'enablePrettyUrl' => true,
|
||||
'suffix' => '.html',
|
||||
'cacheID' => false,
|
||||
'rules' => array(
|
||||
array(
|
||||
'pattern' => 'post/<id>/<title>',
|
||||
'route' => 'post/view',
|
||||
),
|
||||
),
|
||||
));
|
||||
// matching pathinfo
|
||||
$request->pathInfo = 'post/123/this+is+sample.html';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('post/view', array('id' => '123', 'title' => 'this+is+sample')), $result);
|
||||
// matching pathinfo without suffix
|
||||
$request->pathInfo = 'post/123/this+is+sample';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertFalse($result);
|
||||
// empty pathinfo
|
||||
$request->pathInfo = '';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('', array()), $result);
|
||||
// normal pathinfo
|
||||
$request->pathInfo = 'site/index.html';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertEquals(array('site/index', array()), $result);
|
||||
// pathinfo without suffix
|
||||
$request->pathInfo = 'site/index';
|
||||
$result = $manager->parseRequest($request);
|
||||
$this->assertFalse($result);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user