Skip to content

Commit f085134

Browse files
authored
Merge pull request #668 from skipperbent/v5-development
Version 5.3.0.4
2 parents 9b8843a + 00d1c53 commit f085134

File tree

5 files changed

+82
-23
lines changed

5 files changed

+82
-23
lines changed

src/Pecee/SimpleRouter/Route/LoadableRoute.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,16 @@ public function setUrl(string $url): ILoadableRoute
8282
{
8383
$this->url = ($url === '/') ? '/' : '/' . trim($url, '/') . '/';
8484

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

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

8990
if ((bool)preg_match_all('/' . $regex . '/u', $this->url, $matches) !== false) {
90-
$this->parameters = array_fill_keys($matches[1], null);
91+
$parameters = array_fill_keys($matches[1], null);
9192
}
9293
}
94+
$this->parameters = $parameters;
9395

9496
return $this;
9597
}

src/Pecee/SimpleRouter/Route/RouteResource.php

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,22 @@
77
class RouteResource extends LoadableRoute implements IControllerRoute
88
{
99
protected array $urls = [
10-
'index' => '',
11-
'create' => 'create',
12-
'store' => '',
13-
'show' => '',
14-
'edit' => 'edit',
15-
'update' => '',
10+
'index' => '',
11+
'create' => 'create',
12+
'store' => '',
13+
'show' => '',
14+
'edit' => 'edit',
15+
'update' => '',
1616
'destroy' => '',
1717
];
1818

1919
protected array $methodNames = [
20-
'index' => 'index',
21-
'create' => 'create',
22-
'store' => 'store',
23-
'show' => 'show',
24-
'edit' => 'edit',
25-
'update' => 'update',
20+
'index' => 'index',
21+
'create' => 'create',
22+
'store' => 'store',
23+
'show' => 'show',
24+
'edit' => 'edit',
25+
'update' => 'update',
2626
'destroy' => 'destroy',
2727
];
2828

@@ -68,12 +68,15 @@ public function hasName(string $name): bool
6868
*/
6969
public function findUrl(?string $method = null, $parameters = null, ?string $name = null): string
7070
{
71-
$url = array_search($name, $this->names, true);
72-
if ($url !== false) {
73-
return rtrim($this->url . $this->urls[$url], '/') . '/';
71+
$url = parent::findUrl($method, $parameters, $name);
72+
73+
$action = array_search($name, $this->names, true);
74+
75+
if ($action !== false) {
76+
return $url . $this->urls[$action];
7477
}
7578

76-
return $this->url;
79+
return $url;
7780
}
7881

7982
protected function call($method): bool
@@ -172,12 +175,12 @@ public function setName(string $name): ILoadableRoute
172175
$this->name = $name;
173176

174177
$this->names = [
175-
'index' => $this->name . '.index',
176-
'create' => $this->name . '.create',
177-
'store' => $this->name . '.store',
178-
'show' => $this->name . '.show',
179-
'edit' => $this->name . '.edit',
180-
'update' => $this->name . '.update',
178+
'index' => $this->name . '.index',
179+
'create' => $this->name . '.create',
180+
'store' => $this->name . '.store',
181+
'show' => $this->name . '.show',
182+
'edit' => $this->name . '.edit',
183+
'update' => $this->name . '.update',
181184
'destroy' => $this->name . '.destroy',
182185
];
183186

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
use Pecee\Http\Request;
4+
5+
class DummyLoadableRoute extends Pecee\SimpleRouter\Route\LoadableRoute {
6+
7+
public function matchRoute(string $url, Request $request): bool
8+
{
9+
return false;
10+
}
11+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
require_once 'Dummy/Route/DummyLoadableRoute.php';
4+
5+
class LoadableRouteTest extends \PHPUnit\Framework\TestCase
6+
{
7+
public function testSetUrlUpdatesParameters()
8+
{
9+
$route = new DummyLoadableRoute();
10+
$this->assertEmpty($route->getParameters());
11+
12+
$route->setUrl('/');
13+
$this->assertEmpty($route->getParameters());
14+
15+
$expected = ['param' => null, 'optionalParam' => null];
16+
$route->setUrl('/{param}/{optionalParam?}');
17+
$this->assertEquals($expected, $route->getParameters());
18+
19+
$expected = ['otherParam' => null];
20+
$route->setUrl('/{otherParam}');
21+
$this->assertEquals($expected, $route->getParameters());
22+
23+
$expected = [];
24+
$route->setUrl('/');
25+
$this->assertEquals($expected, $route->getParameters());
26+
}
27+
}

tests/Pecee/SimpleRouter/RouterResourceTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,20 @@ public function testResourceGet()
6666

6767
}
6868

69+
public function testResourceUrls()
70+
{
71+
TestRouter::resource('/resource', 'ResourceController')->name('resource');
72+
73+
TestRouter::debugOutputNoReset('/resource');
74+
75+
$this->assertEquals('/resource/3/create/', TestRouter::router()->getUrl('resource.create', ['id' => 3]));
76+
$this->assertEquals('/resource/3/edit/', TestRouter::router()->getUrl('resource.edit', ['id' => 3]));
77+
$this->assertEquals('/resource/3/', TestRouter::router()->getUrl('resource.update', ['id' => 3]));
78+
$this->assertEquals('/resource/3/', TestRouter::router()->getUrl('resource.destroy', ['id' => 3]));
79+
$this->assertEquals('/resource/3/', TestRouter::router()->getUrl('resource.delete', ['id' => 3]));
80+
$this->assertEquals('/resource/', TestRouter::router()->getUrl('resource'));
81+
82+
TestRouter::router()->reset();
83+
}
84+
6985
}

0 commit comments

Comments
 (0)