mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-18 23:43:19 +08:00
[WIP] RESTful routing syntax for UrlManager
issue #303 Here is the proposal for RESTful routing syntax: https://gist.github.com/cebe/5674918
This commit is contained in:
@@ -43,6 +43,28 @@ class UrlManager extends Component
|
|||||||
* array, one can use the key to represent the pattern and the value the corresponding route.
|
* array, one can use the key to represent the pattern and the value the corresponding route.
|
||||||
* For example, `'post/<id:\d+>' => 'post/view'`.
|
* For example, `'post/<id:\d+>' => 'post/view'`.
|
||||||
*
|
*
|
||||||
|
* For RESTful routing this shortcut also allows you to specify the [[UrlRule::verb|HTTP verb]]
|
||||||
|
* the rule should apply for by prepending it to the pattern, separated by a blank.
|
||||||
|
* For example, `'PUT post/<id:\d+>' => 'post/update'`.
|
||||||
|
* You may specify multiple verbs by separating them with comma
|
||||||
|
* like this: `'POST,PUT post/index' => 'post/create'`.
|
||||||
|
* Note that [[UrlRule::mode|mode]] will be set to PARSING_ONLY when specifying verb in this way
|
||||||
|
* so you normally would not specify a verb for normal GET request.
|
||||||
|
*
|
||||||
|
* Here is an example configuration for RESTful CRUD controller:
|
||||||
|
* ~~~php
|
||||||
|
* array(
|
||||||
|
* 'dashboard' => 'site/index',
|
||||||
|
*
|
||||||
|
* 'POST <controller:\w+>s' => '<controller>/create',
|
||||||
|
* '<controller:\w+>s' => '<controller>/index',
|
||||||
|
*
|
||||||
|
* 'PUT <controller:\w+>/<id:\d+>' => '<controller>/update',
|
||||||
|
* 'DELETE <controller:\w+>/<id:\d+>' => '<controller>/delete',
|
||||||
|
* '<controller:\w+>/<id:\d+>' => '<controller>/view',
|
||||||
|
* );
|
||||||
|
* ~~~
|
||||||
|
*
|
||||||
* Note that if you modify this property after the UrlManager object is created, make sure
|
* Note that if you modify this property after the UrlManager object is created, make sure
|
||||||
* you populate the array with rule objects instead of rule configurations.
|
* you populate the array with rule objects instead of rule configurations.
|
||||||
*/
|
*/
|
||||||
@@ -115,9 +137,17 @@ class UrlManager extends Component
|
|||||||
foreach ($this->rules as $key => $rule) {
|
foreach ($this->rules as $key => $rule) {
|
||||||
if (!is_array($rule)) {
|
if (!is_array($rule)) {
|
||||||
$rule = array(
|
$rule = array(
|
||||||
'pattern' => $key,
|
|
||||||
'route' => $rule,
|
'route' => $rule,
|
||||||
);
|
);
|
||||||
|
if (($pos = strpos($key, ' ')) !== false) {
|
||||||
|
$verbs = substr($key, 0, $pos);
|
||||||
|
if (preg_match('/^((GET|POST|PUT|DELETE),?)*$/', $verbs, $matches)) {
|
||||||
|
$rule['verb'] = explode(',', $verbs);
|
||||||
|
$rule['mode'] = UrlRule::PARSING_ONLY;
|
||||||
|
$key = substr($key, $pos + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$rule['pattern'] = $key;
|
||||||
}
|
}
|
||||||
$rules[] = Yii::createObject(array_merge($this->ruleConfig, $rule));
|
$rules[] = Yii::createObject(array_merge($this->ruleConfig, $rule));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -248,4 +248,6 @@ class UrlManagerTest extends TestCase
|
|||||||
$result = $manager->parseRequest($request);
|
$result = $manager->parseRequest($request);
|
||||||
$this->assertFalse($result);
|
$this->assertFalse($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO test RESTful pattern syntax e.g. 'GET index' => 'site/index'
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user