diff --git a/src/Pecee/SimpleRouter/Route/RouteResource.php b/src/Pecee/SimpleRouter/Route/RouteResource.php index 7ec6307..b66b796 100644 --- a/src/Pecee/SimpleRouter/Route/RouteResource.php +++ b/src/Pecee/SimpleRouter/Route/RouteResource.php @@ -7,22 +7,22 @@ use Pecee\Http\Request; class RouteResource extends LoadableRoute implements IControllerRoute { protected array $urls = [ - 'index' => '', - 'create' => 'create', - 'store' => '', - 'show' => '', - 'edit' => 'edit', - 'update' => '', + 'index' => '', + 'create' => 'create', + 'store' => '', + 'show' => '', + 'edit' => 'edit', + 'update' => '', 'destroy' => '', ]; protected array $methodNames = [ - 'index' => 'index', - 'create' => 'create', - 'store' => 'store', - 'show' => 'show', - 'edit' => 'edit', - 'update' => 'update', + 'index' => 'index', + 'create' => 'create', + 'store' => 'store', + 'show' => 'show', + 'edit' => 'edit', + 'update' => 'update', 'destroy' => 'destroy', ]; @@ -68,12 +68,15 @@ class RouteResource extends LoadableRoute implements IControllerRoute */ public function findUrl(?string $method = null, $parameters = null, ?string $name = null): string { - $url = array_search($name, $this->names, true); - if ($url !== false) { - return rtrim($this->url . $this->urls[$url], '/') . '/'; + $url = parent::findUrl($method, $parameters, $name); + + $action = array_search($name, $this->names, true); + + if ($action !== false) { + return $url . $this->urls[$action]; } - return $this->url; + return $url; } protected function call($method): bool @@ -172,12 +175,12 @@ class RouteResource extends LoadableRoute implements IControllerRoute $this->name = $name; $this->names = [ - 'index' => $this->name . '.index', - 'create' => $this->name . '.create', - 'store' => $this->name . '.store', - 'show' => $this->name . '.show', - 'edit' => $this->name . '.edit', - 'update' => $this->name . '.update', + 'index' => $this->name . '.index', + 'create' => $this->name . '.create', + 'store' => $this->name . '.store', + 'show' => $this->name . '.show', + 'edit' => $this->name . '.edit', + 'update' => $this->name . '.update', 'destroy' => $this->name . '.destroy', ]; diff --git a/tests/Pecee/SimpleRouter/RouterResourceTest.php b/tests/Pecee/SimpleRouter/RouterResourceTest.php index 0b6f5fb..a5040bd 100644 --- a/tests/Pecee/SimpleRouter/RouterResourceTest.php +++ b/tests/Pecee/SimpleRouter/RouterResourceTest.php @@ -66,4 +66,20 @@ class RouterResourceTest extends \PHPUnit\Framework\TestCase } + public function testResourceUrls() + { + TestRouter::resource('/resource', 'ResourceController')->name('resource'); + + TestRouter::debugOutputNoReset('/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/', TestRouter::router()->getUrl('resource')); + + TestRouter::router()->reset(); + } + } \ No newline at end of file