Browse Source

Fixes #7996: Short syntax for verb in GroupUrlRule

tags/2.0.14
Elvira Sheina 7 years ago committed by Alexander Makarov
parent
commit
3b1ff661d8
  1. 1
      framework/CHANGELOG.md
  2. 7
      framework/web/GroupUrlRule.php
  3. 46
      tests/framework/web/GroupUrlRuleTest.php

1
framework/CHANGELOG.md

@ -22,6 +22,7 @@ Yii Framework 2 Change Log
- Enh #8752: Allow specify `$attributeNames` as a string for `yii\base\Model` `validate()` method (developeruz)
- Enh #9137: Added `Access-Control-Allow-Method` header for the OPTIONS request (developeruz)
- Enh #14043: Added `yii\helpers\IpHelper` (silverfire, cebe)
- Enh #7996: Short syntax for verb in GroupUrlRule (schojniak, developeruz)
- Enh #14568: Refactored migration templates to use `safeUp()` and `safeDown()` methods (Kolyunya)
- Enh #15219: Added `yii\filters\auth\HttpHeaderAuth` (bboure)
- Enh #14662: Added support for custom `Content-Type` specification to `yii\web\JsonResponseFormatter` (Kolyunya)

7
framework/web/GroupUrlRule.php

@ -90,9 +90,16 @@ class GroupUrlRule extends CompositeUrlRule
$rules = [];
foreach ($this->rules as $key => $rule) {
if (!is_array($rule)) {
$verbs = 'GET|HEAD|POST|PUT|PATCH|DELETE|OPTIONS';
$verb = null;
if (preg_match("/^((?:(?:$verbs),)*(?:$verbs))\\s+(.*)$/", $key, $matches)) {
$verb = explode(',', $matches[1]);
$key = $matches[2];
}
$rule = [
'pattern' => ltrim($this->prefix . '/' . $key, '/'),
'route' => ltrim($this->routePrefix . '/' . $rule, '/'),
'verb' => $verb
];
} elseif (isset($rule['pattern'], $rule['route'])) {
$rule['pattern'] = ltrim($this->prefix . '/' . $rule['pattern'], '/');

46
tests/framework/web/GroupUrlRuleTest.php

@ -62,6 +62,52 @@ class GroupUrlRuleTest extends TestCase
}
}
public function testParseVerb()
{
$config = [
'prefix' => 'admin',
'rules' => [
'login' => 'user/login'
],
];
$rules = new GroupUrlRule($config);
$this->assertNull($rules->rules[0]->verb);
$config = [
'prefix' => 'admin',
'rules' => [
'login' => ['route' => 'user/login', 'pattern' => 'login', 'verb' => 'POST'],
],
];
$rules = new GroupUrlRule($config);
$this->assertCount(1, $rules->rules[0]->verb);
$this->assertContains('POST', $rules->rules[0]->verb);
$this->assertEquals('admin/user/login', $rules->rules[0]->route);
$config = [
'prefix' => 'admin',
'rules' => [
'POST login' => 'user/login'
],
];
$rules = new GroupUrlRule($config);
$this->assertCount(1, $rules->rules[0]->verb);
$this->assertContains('POST', $rules->rules[0]->verb);
$this->assertEquals('admin/user/login', $rules->rules[0]->route);
$config = [
'prefix' => 'admin',
'rules' => [
'POST,GET login' => 'user/login'
],
];
$rules = new GroupUrlRule($config);
$this->assertCount(2, $rules->rules[0]->verb);
$this->assertContains('POST', $rules->rules[0]->verb);
$this->assertContains('GET', $rules->rules[0]->verb);
$this->assertEquals('admin/user/login', $rules->rules[0]->route);
}
protected function getTestsForCreateUrl()
{
// structure of each test

Loading…
Cancel
Save