Skip to content

Commit

Permalink
[Routing] Fix removing aliases pointing to removed route in RouteColl…
Browse files Browse the repository at this point in the history
…ection::remove()
  • Loading branch information
fancyweb committed Nov 29, 2023
1 parent 853fc7d commit 36a3fc4
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
11 changes: 9 additions & 2 deletions RouteCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,15 @@ public function get(string $name)
*/
public function remove($name)
{
foreach ((array) $name as $n) {
unset($this->routes[$n], $this->priorities[$n], $this->aliases[$n]);
$names = (array) $name;
foreach ($names as $n) {
unset($this->routes[$n], $this->priorities[$n]);
}

foreach ($this->aliases as $k => $alias) {
if (\in_array($alias->getId(), $names, true)) {
unset($this->aliases[$k]);
}
}
}

Expand Down
2 changes: 2 additions & 0 deletions Tests/RouteCollectionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -225,11 +225,13 @@ public function testRemove()
$collection1->add('bar', $bar = new Route('/bar'));
$collection->addCollection($collection1);
$collection->add('last', $last = new Route('/last'));
$collection->addAlias('ccc_my_custom_alias', 'foo');

$collection->remove('foo');
$this->assertSame(['bar' => $bar, 'last' => $last], $collection->all(), '->remove() can remove a single route');
$collection->remove(['bar', 'last']);
$this->assertSame([], $collection->all(), '->remove() accepts an array and can remove multiple routes at once');
$this->assertNull($collection->getAlias('ccc_my_custom_alias'));
}

public function testSetHost()
Expand Down

0 comments on commit 36a3fc4

Please sign in to comment.