Merge pull request #669 from skipperbent/v5-release

V5 release
This commit is contained in:
Simon Sessingø
2023-05-06 17:39:41 +02:00
committed by GitHub
5 changed files with 82 additions and 23 deletions
@@ -82,14 +82,16 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
{ {
$this->url = ($url === '/') ? '/' : '/' . trim($url, '/') . '/'; $this->url = ($url === '/') ? '/' : '/' . trim($url, '/') . '/';
$parameters = [];
if (strpos($this->url, $this->paramModifiers[0]) !== false) { if (strpos($this->url, $this->paramModifiers[0]) !== false) {
$regex = sprintf(static::PARAMETERS_REGEX_FORMAT, $this->paramModifiers[0], $this->paramOptionalSymbol, $this->paramModifiers[1]); $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) { 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; return $this;
} }
@@ -68,12 +68,15 @@ class RouteResource extends LoadableRoute implements IControllerRoute
*/ */
public function findUrl(?string $method = null, $parameters = null, ?string $name = null): string public function findUrl(?string $method = null, $parameters = null, ?string $name = null): string
{ {
$url = array_search($name, $this->names, true); $url = parent::findUrl($method, $parameters, $name);
if ($url !== false) {
return rtrim($this->url . $this->urls[$url], '/') . '/'; $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 protected function call($method): bool
@@ -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;
}
}
@@ -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());
}
}
@@ -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();
}
} }