mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Implement trailing greedy star star.
Trailing args grabs all trailing arguments as a single passed parameter. This is useful when you want to have trailing arguments that contain / in them.
This commit is contained in:
parent
d6f7669f54
commit
c3f647217d
2 changed files with 35 additions and 1 deletions
|
@ -148,7 +148,10 @@ class CakeRoute {
|
||||||
}
|
}
|
||||||
$names[] = $name;
|
$names[] = $name;
|
||||||
}
|
}
|
||||||
if (preg_match('#\/\*$#', $route)) {
|
if (preg_match('#\/\*\*$#', $route)) {
|
||||||
|
$parsed = preg_replace('#/\\\\\*\\\\\*$#', '(?:/(?P<_trailing_>.*))?', $parsed);
|
||||||
|
$this->_greedy = true;
|
||||||
|
} elseif (preg_match('#\/\*$#', $route)) {
|
||||||
$parsed = preg_replace('#/\\\\\*$#', '(?:/(?P<_args_>.*))?', $parsed);
|
$parsed = preg_replace('#/\\\\\*$#', '(?:/(?P<_args_>.*))?', $parsed);
|
||||||
$this->_greedy = true;
|
$this->_greedy = true;
|
||||||
}
|
}
|
||||||
|
@ -226,6 +229,11 @@ class CakeRoute {
|
||||||
unset($route['_args_']);
|
unset($route['_args_']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($route['_trailing_'])) {
|
||||||
|
$route['pass'][] = $route['_trailing_'];
|
||||||
|
unset($route['_trailing_']);
|
||||||
|
}
|
||||||
|
|
||||||
// restructure 'pass' key route params
|
// restructure 'pass' key route params
|
||||||
if (isset($this->options['pass'])) {
|
if (isset($this->options['pass'])) {
|
||||||
$j = count($this->options['pass']);
|
$j = count($this->options['pass']);
|
||||||
|
|
|
@ -718,4 +718,30 @@ class CakeRouteTest extends CakeTestCase {
|
||||||
);
|
);
|
||||||
$this->assertEquals($expected, $result, 'Slug should have moved');
|
$this->assertEquals($expected, $result, 'Slug should have moved');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the /** special type on parsing.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testParseTrailing() {
|
||||||
|
$route = new CakeRoute('/:controller/:action/**');
|
||||||
|
$result = $route->parse('/posts/index/1/2/3/foo:bar');
|
||||||
|
$expected = array(
|
||||||
|
'controller' => 'posts',
|
||||||
|
'action' => 'index',
|
||||||
|
'pass' => array('1/2/3/foo:bar'),
|
||||||
|
'named' => array()
|
||||||
|
);
|
||||||
|
$this->assertEquals($expected, $result);
|
||||||
|
|
||||||
|
$result = $route->parse('/posts/index/http://example.com');
|
||||||
|
$expected = array(
|
||||||
|
'controller' => 'posts',
|
||||||
|
'action' => 'index',
|
||||||
|
'pass' => array('http://example.com'),
|
||||||
|
'named' => array()
|
||||||
|
);
|
||||||
|
$this->assertEquals($expected, $result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue