diff --git a/src/Pecee/SimpleRouter/Route/LoadableRoute.php b/src/Pecee/SimpleRouter/Route/LoadableRoute.php index 9d7a593..f8b49d8 100644 --- a/src/Pecee/SimpleRouter/Route/LoadableRoute.php +++ b/src/Pecee/SimpleRouter/Route/LoadableRoute.php @@ -91,6 +91,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute $parameters = array_fill_keys($matches[1], null); } } + $this->parameters = $parameters; return $this; diff --git a/src/Pecee/SimpleRouter/Route/RouteResource.php b/src/Pecee/SimpleRouter/Route/RouteResource.php index b66b796..5254579 100644 --- a/src/Pecee/SimpleRouter/Route/RouteResource.php +++ b/src/Pecee/SimpleRouter/Route/RouteResource.php @@ -68,15 +68,19 @@ class RouteResource extends LoadableRoute implements IControllerRoute */ public function findUrl(?string $method = null, $parameters = null, ?string $name = null): string { - $url = parent::findUrl($method, $parameters, $name); + $url = array_search($name, $this->names, true); - $action = array_search($name, $this->names, true); + $parametersUrl = ''; - if ($action !== false) { - return $url . $this->urls[$action]; + if ($parameters !== null && count($parameters) > 0) { + $parametersUrl = join('/', $parameters) . '/'; } - return $url; + if ($url !== false) { + return rtrim($this->url . $parametersUrl . $this->urls[$url], '/') . '/'; + } + + return $this->url . $parametersUrl; } protected function call($method): bool diff --git a/tests/Pecee/SimpleRouter/RouterResourceTest.php b/tests/Pecee/SimpleRouter/RouterResourceTest.php index a5040bd..052ae91 100644 --- a/tests/Pecee/SimpleRouter/RouterResourceTest.php +++ b/tests/Pecee/SimpleRouter/RouterResourceTest.php @@ -63,20 +63,19 @@ class RouterResourceTest extends \PHPUnit\Framework\TestCase $response = TestRouter::debugOutput('/resource/38', 'get'); $this->assertEquals('show 38', $response); - } public function testResourceUrls() { TestRouter::resource('/resource', 'ResourceController')->name('resource'); - TestRouter::debugOutputNoReset('/resource'); + TestRouter::debugNoReset('/resource'); $this->assertEquals('/resource/3/create/', TestRouter::router()->getUrl('resource.create', ['id' => 3])); - $this->assertEquals('/resource/3/edit/', TestRouter::router()->getUrl('resource.edit', ['id' => 3])); - $this->assertEquals('/resource/3/', TestRouter::router()->getUrl('resource.update', ['id' => 3])); - $this->assertEquals('/resource/3/', TestRouter::router()->getUrl('resource.destroy', ['id' => 3])); - $this->assertEquals('/resource/3/', TestRouter::router()->getUrl('resource.delete', ['id' => 3])); + $this->assertEquals('/resource/5/edit/', TestRouter::router()->getUrl('resource.edit', ['id' => 5])); + $this->assertEquals('/resource/6/', TestRouter::router()->getUrl('resource.update', ['id' => 6])); + $this->assertEquals('/resource/9/', TestRouter::router()->getUrl('resource.destroy', ['id' => 9])); + $this->assertEquals('/resource/12/', TestRouter::router()->getUrl('resource.delete', ['id' => 12])); $this->assertEquals('/resource/', TestRouter::router()->getUrl('resource')); TestRouter::router()->reset(); diff --git a/tests/Pecee/SimpleRouter/RouterUrlTest.php b/tests/Pecee/SimpleRouter/RouterUrlTest.php index ed1dff9..d7f4dcb 100644 --- a/tests/Pecee/SimpleRouter/RouterUrlTest.php +++ b/tests/Pecee/SimpleRouter/RouterUrlTest.php @@ -184,7 +184,7 @@ class RouterUrlTest extends \PHPUnit\Framework\TestCase // Should match /?jackdaniels=true&cola=yeah $this->assertEquals('/?jackdaniels=true&cola=yeah', TestRouter::getUrl('home', null, ['jackdaniels' => 'true', 'cola' => 'yeah'])); - TestRouter::router()->reset(); + TestRouter::reset(); } diff --git a/tests/TestRouter.php b/tests/TestRouter.php index 636c836..cd40a11 100644 --- a/tests/TestRouter.php +++ b/tests/TestRouter.php @@ -8,6 +8,11 @@ class TestRouter extends \Pecee\SimpleRouter\SimpleRouter static::request()->setHost('testhost.com'); } + public static function reset(): void + { + static::$router = null; + } + public static function debugNoReset(string $testUrl, string $testMethod = 'get'): void { $request = static::request();