Browse Source

improved UrlManager RESTful syntax regex

tags/2.0.0-beta
Carsten Brandt 11 years ago
parent
commit
1192306481
  1. 15
      framework/yii/web/UrlManager.php

15
framework/yii/web/UrlManager.php

@ -45,11 +45,11 @@ class UrlManager extends Component
*
* For RESTful routing the mentioned shortcut format also allows you to specify the
* [[UrlRule::verb|HTTP verb]] that the rule should apply for.
* You can do that by prepending it to the pattern, separated by a space.
* You can do that by prepending it to the pattern, separated by space.
* 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'`.
* The supported verbs in the shortcut format are: GET, POST, PUT and DELETE.
* The supported verbs in the shortcut format are: GET, HEAD, POST, PUT and DELETE.
* 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.
*
@ -142,13 +142,10 @@ class UrlManager extends Component
$rule = array(
'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);
}
if (preg_match('/^((?:(GET|HEAD|POST|PUT|DELETE),)*(GET|HEAD|POST|PUT|DELETE))\s+(.*)$/', $key, $matches)) {
$rule['verb'] = explode(',', $matches[1]);
$rule['mode'] = UrlRule::PARSING_ONLY;
$key = $matches[4];
}
$rule['pattern'] = $key;
}

Loading…
Cancel
Save