mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-17 14:57:23 +08:00
Fixes issue #337: support strict parsing for URL manager.
This commit is contained in:
@@ -26,6 +26,12 @@ class UrlManager extends Component
|
|||||||
* "/index.php?r=news/view&id=100".
|
* "/index.php?r=news/view&id=100".
|
||||||
*/
|
*/
|
||||||
public $enablePrettyUrl = false;
|
public $enablePrettyUrl = false;
|
||||||
|
/**
|
||||||
|
* @var boolean whether to enable strict parsing. If strict parsing is enabled, the incoming
|
||||||
|
* requested URL must match at least one of the [[rules]] in order to be treated as a valid request.
|
||||||
|
* This property is used only when [[enablePrettyUrl]] is true.
|
||||||
|
*/
|
||||||
|
public $enableStrictParsing = false;
|
||||||
/**
|
/**
|
||||||
* @var array the rules for creating and parsing URLs when [[enablePrettyUrl]] is true.
|
* @var array the rules for creating and parsing URLs when [[enablePrettyUrl]] is true.
|
||||||
* This property is used only if [[enablePrettyUrl]] is true. Each element in the array
|
* This property is used only if [[enablePrettyUrl]] is true. Each element in the array
|
||||||
@@ -139,6 +145,10 @@ class UrlManager extends Component
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->enableStrictParsing) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$suffix = (string)$this->suffix;
|
$suffix = (string)$this->suffix;
|
||||||
if ($suffix !== '' && $suffix !== '/' && $pathInfo !== '') {
|
if ($suffix !== '' && $suffix !== '/' && $pathInfo !== '') {
|
||||||
$n = strlen($this->suffix);
|
$n = strlen($this->suffix);
|
||||||
|
|||||||
@@ -224,5 +224,27 @@ class UrlManagerTest extends \yiiunit\TestCase
|
|||||||
$request->pathInfo = 'site/index';
|
$request->pathInfo = 'site/index';
|
||||||
$result = $manager->parseRequest($request);
|
$result = $manager->parseRequest($request);
|
||||||
$this->assertFalse($result);
|
$this->assertFalse($result);
|
||||||
|
|
||||||
|
// strict parsing
|
||||||
|
$manager = new UrlManager(array(
|
||||||
|
'enablePrettyUrl' => true,
|
||||||
|
'enableStrictParsing' => true,
|
||||||
|
'suffix' => '.html',
|
||||||
|
'cache' => null,
|
||||||
|
'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);
|
||||||
|
// unmatching pathinfo
|
||||||
|
$request->pathInfo = 'site/index.html';
|
||||||
|
$result = $manager->parseRequest($request);
|
||||||
|
$this->assertFalse($result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user