mirror of
https://github.com/skipperbent/simple-php-router.git
synced 2026-06-17 08:47:52 +00:00
Parameters are now correctly passed on to sub-routes
This commit is contained in:
@@ -655,6 +655,16 @@ SimpleRouter::group(['prefix' => '/admin'], function () {
|
|||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can also use parameters in your groups:
|
||||||
|
|
||||||
|
```php
|
||||||
|
SimpleRouter::group(['prefix' => '/lang/{language}'], function ($language) {
|
||||||
|
SimpleRouter::get('/users', function () {
|
||||||
|
// Matches The "/admin/users" URL
|
||||||
|
});
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
## Partial groups
|
## Partial groups
|
||||||
|
|
||||||
Partial router groups has the same benefits as a normal group, but supports parameters and are only rendered once the url has matched.
|
Partial router groups has the same benefits as a normal group, but supports parameters and are only rendered once the url has matched.
|
||||||
|
|||||||
@@ -154,16 +154,21 @@ abstract class Route implements IRoute
|
|||||||
|
|
||||||
$groupParameters = $this->getGroup() !== null ? $this->getGroup()->getParameters() : [];
|
$groupParameters = $this->getGroup() !== null ? $this->getGroup()->getParameters() : [];
|
||||||
|
|
||||||
|
$lastParams = [];
|
||||||
|
|
||||||
/* Only take matched parameters with name */
|
/* Only take matched parameters with name */
|
||||||
foreach ((array)$parameters[1] as $name) {
|
foreach ((array)$parameters[1] as $name) {
|
||||||
|
|
||||||
// Ignore parent parameters
|
// Ignore parent parameters
|
||||||
if(isset($groupParameters[$name]) === true) {
|
if(isset($groupParameters[$name]) === true) {
|
||||||
|
$lastParams[$name] = $matches[$name];
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$values[$name] = (isset($matches[$name]) === true && $matches[$name] !== '') ? $matches[$name] : null;
|
$values[$name] = (isset($matches[$name]) === true && $matches[$name] !== '') ? $matches[$name] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$values = array_merge($values, $lastParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->originalParameters = $values;
|
$this->originalParameters = $values;
|
||||||
|
|||||||
@@ -308,4 +308,22 @@ class RouterUrlTest extends \PHPUnit\Framework\TestCase
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testPassParameter() {
|
||||||
|
|
||||||
|
$result = false;
|
||||||
|
$expectedLanguage = 'da';
|
||||||
|
|
||||||
|
TestRouter::group(['prefix' => '/lang/{lang}'], function () use(&$result, $expectedLanguage) {
|
||||||
|
|
||||||
|
TestRouter::get('/test', function($language) use(&$result, $expectedLanguage) {
|
||||||
|
$result = $expectedLanguage;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
TestRouter::debug("/lang/$expectedLanguage/test");
|
||||||
|
|
||||||
|
$this->assertEquals($expectedLanguage, $result);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user