Skip to content

Commit

Permalink
Merge pull request #668 from skipperbent/v5-development
Browse files Browse the repository at this point in the history
Version 5.3.0.4
  • Loading branch information
skipperbent authored May 6, 2023
2 parents 9b8843a + 00d1c53 commit f085134
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 23 deletions.
4 changes: 3 additions & 1 deletion src/Pecee/SimpleRouter/Route/LoadableRoute.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,16 @@ public function setUrl(string $url): ILoadableRoute
{
$this->url = ($url === '/') ? '/' : '/' . trim($url, '/') . '/';

$parameters = [];
if (strpos($this->url, $this->paramModifiers[0]) !== false) {

$regex = sprintf(static::PARAMETERS_REGEX_FORMAT, $this->paramModifiers[0], $this->paramOptionalSymbol, $this->paramModifiers[1]);

if ((bool)preg_match_all('/' . $regex . '/u', $this->url, $matches) !== false) {
$this->parameters = array_fill_keys($matches[1], null);
$parameters = array_fill_keys($matches[1], null);
}
}
$this->parameters = $parameters;

return $this;
}
Expand Down
47 changes: 25 additions & 22 deletions src/Pecee/SimpleRouter/Route/RouteResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,22 @@
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',
];

Expand Down Expand Up @@ -68,12 +68,15 @@ public function hasName(string $name): bool
*/
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
Expand Down Expand Up @@ -172,12 +175,12 @@ public function setName(string $name): ILoadableRoute
$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',
];

Expand Down
11 changes: 11 additions & 0 deletions tests/Pecee/SimpleRouter/Dummy/Route/DummyLoadableRoute.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php

use Pecee\Http\Request;

class DummyLoadableRoute extends Pecee\SimpleRouter\Route\LoadableRoute {

public function matchRoute(string $url, Request $request): bool
{
return false;
}
}
27 changes: 27 additions & 0 deletions tests/Pecee/SimpleRouter/LoadableRouteTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

require_once 'Dummy/Route/DummyLoadableRoute.php';

class LoadableRouteTest extends \PHPUnit\Framework\TestCase
{
public function testSetUrlUpdatesParameters()
{
$route = new DummyLoadableRoute();
$this->assertEmpty($route->getParameters());

$route->setUrl('/');
$this->assertEmpty($route->getParameters());

$expected = ['param' => null, 'optionalParam' => null];
$route->setUrl('/{param}/{optionalParam?}');
$this->assertEquals($expected, $route->getParameters());

$expected = ['otherParam' => null];
$route->setUrl('/{otherParam}');
$this->assertEquals($expected, $route->getParameters());

$expected = [];
$route->setUrl('/');
$this->assertEquals($expected, $route->getParameters());
}
}
16 changes: 16 additions & 0 deletions tests/Pecee/SimpleRouter/RouterResourceTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,20 @@ public function testResourceGet()

}

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();
}

}

0 comments on commit f085134

Please sign in to comment.