mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-03 22:32:40 +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;
|
return $this->_pathInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setPathInfo($value)
|
||||||
|
{
|
||||||
|
$this->_pathInfo = trim($value, '/');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolves the path info part of the currently requested URL.
|
* 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).
|
* 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;
|
namespace yii\web;
|
||||||
|
|
||||||
use Yii;
|
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.
|
* 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());
|
return array($pathInfo, array());
|
||||||
} else {
|
} else {
|
||||||
$route = (string)$request->getParam($this->routeVar);
|
$route = $request->getParam($this->routeVar);
|
||||||
return array($route, array());
|
if (is_array($route)) {
|
||||||
|
$route = '';
|
||||||
|
}
|
||||||
|
return array((string)$route, array());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,9 +233,7 @@ class UrlManager extends Component
|
|||||||
public function getHostInfo()
|
public function getHostInfo()
|
||||||
{
|
{
|
||||||
if ($this->_hostInfo === null) {
|
if ($this->_hostInfo === null) {
|
||||||
/** @var $request \yii\web\Request */
|
$this->_hostInfo = Yii::$app->getRequest()->getHostInfo();
|
||||||
$request = Yii::$app->getRequest();
|
|
||||||
$this->_hostInfo = $request->getHostInfo();
|
|
||||||
}
|
}
|
||||||
return $this->_hostInfo;
|
return $this->_hostInfo;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,14 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace yiiunit\framework\web;
|
namespace yiiunit\framework\web;
|
||||||
|
|
||||||
use yii\web\Application;
|
use yii\web\Request;
|
||||||
use yii\web\UrlManager;
|
use yii\web\UrlManager;
|
||||||
|
|
||||||
class UrlManagerTest extends \yiiunit\TestCase
|
class UrlManagerTest extends \yiiunit\TestCase
|
||||||
{
|
{
|
||||||
public function testCreateUrl()
|
public function testCreateUrl()
|
||||||
{
|
{
|
||||||
new Application('test', __DIR__ . '/../..');
|
|
||||||
// default setting with '/' as base url
|
// default setting with '/' as base url
|
||||||
$manager = new UrlManager(array(
|
$manager = new UrlManager(array(
|
||||||
'baseUrl' => '/',
|
'baseUrl' => '/',
|
||||||
@ -50,6 +49,7 @@ class UrlManagerTest extends \yiiunit\TestCase
|
|||||||
// pretty URL with rules
|
// pretty URL with rules
|
||||||
$manager = new UrlManager(array(
|
$manager = new UrlManager(array(
|
||||||
'enablePrettyUrl' => true,
|
'enablePrettyUrl' => true,
|
||||||
|
'cacheID' => false,
|
||||||
'rules' => array(
|
'rules' => array(
|
||||||
array(
|
array(
|
||||||
'pattern' => 'post/<id>/<title>',
|
'pattern' => 'post/<id>/<title>',
|
||||||
@ -66,6 +66,7 @@ class UrlManagerTest extends \yiiunit\TestCase
|
|||||||
// pretty URL with rules and suffix
|
// pretty URL with rules and suffix
|
||||||
$manager = new UrlManager(array(
|
$manager = new UrlManager(array(
|
||||||
'enablePrettyUrl' => true,
|
'enablePrettyUrl' => true,
|
||||||
|
'cacheID' => false,
|
||||||
'rules' => array(
|
'rules' => array(
|
||||||
array(
|
array(
|
||||||
'pattern' => 'post/<id>/<title>',
|
'pattern' => 'post/<id>/<title>',
|
||||||
@ -83,11 +84,118 @@ class UrlManagerTest extends \yiiunit\TestCase
|
|||||||
|
|
||||||
public function testCreateAbsoluteUrl()
|
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()
|
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