Skip to content

Commit 779fe61

Browse files
[9.x] Add method to remove a middleware from a group (#44780)
* Add removeMiddlewareFromGroup method * Add tests for pushMiddlewareToGroup * fix test name * style ci * Update Router.php Co-authored-by: Taylor Otwell <[email protected]>
1 parent 4f7ee1d commit 779fe61

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

src/Illuminate/Routing/Router.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -999,6 +999,32 @@ public function pushMiddlewareToGroup($group, $middleware)
999999
return $this;
10001000
}
10011001

1002+
/**
1003+
* Remove the given middleware from the specified group.
1004+
*
1005+
* @param string $group
1006+
* @param string $middleware
1007+
* @return $this
1008+
*/
1009+
public function removeMiddlewareFromGroup($group, $middleware)
1010+
{
1011+
if (! $this->hasMiddlewareGroup($group)) {
1012+
return $this;
1013+
}
1014+
1015+
$reversedMiddlewaresArray = array_flip($this->middlewareGroups[$group]);
1016+
1017+
if (! array_key_exists($middleware, $reversedMiddlewaresArray)) {
1018+
return $this;
1019+
}
1020+
1021+
$middlewareKey = $reversedMiddlewaresArray[$middleware];
1022+
1023+
unset($this->middlewareGroups[$group][$middlewareKey]);
1024+
1025+
return $this;
1026+
}
1027+
10021028
/**
10031029
* Flush the router's middleware groups.
10041030
*

tests/Routing/RouteRegistrarTest.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,6 +1020,54 @@ public function testCanSetRouteNameUsingNameAlias()
10201020
$this->assertSame('users.index', $this->getRoute()->getName());
10211021
}
10221022

1023+
public function testPushMiddlewareToGroup()
1024+
{
1025+
$this->router->middlewareGroup('web', []);
1026+
$this->router->pushMiddlewareToGroup('web', 'test-middleware');
1027+
1028+
$this->assertEquals(['test-middleware'], $this->router->getMiddlewareGroups()['web']);
1029+
}
1030+
1031+
public function testPushMiddlewareToGroupUnregisteredGroup()
1032+
{
1033+
$this->router->pushMiddlewareToGroup('web', 'test-middleware');
1034+
1035+
$this->assertEquals(['test-middleware'], $this->router->getMiddlewareGroups()['web']);
1036+
}
1037+
1038+
public function testPushMiddlewareToGroupDuplicatedMiddleware()
1039+
{
1040+
$this->router->pushMiddlewareToGroup('web', 'test-middleware');
1041+
$this->router->pushMiddlewareToGroup('web', 'test-middleware');
1042+
1043+
$this->assertEquals(['test-middleware'], $this->router->getMiddlewareGroups()['web']);
1044+
}
1045+
1046+
public function testCanRemoveMiddlewareFromGroup()
1047+
{
1048+
$this->router->pushMiddlewareToGroup('web', 'test-middleware');
1049+
1050+
$this->router->removeMiddlewareFromGroup('web', 'test-middleware');
1051+
1052+
$this->assertEquals([], $this->router->getMiddlewareGroups()['web']);
1053+
}
1054+
1055+
public function testCanRemoveMiddlewareFromGroupNotUnregisteredMiddleware()
1056+
{
1057+
$this->router->middlewareGroup('web', []);
1058+
1059+
$this->router->removeMiddlewareFromGroup('web', 'different-test-middleware');
1060+
1061+
$this->assertEquals([], $this->router->getMiddlewareGroups()['web']);
1062+
}
1063+
1064+
public function testCanRemoveMiddlewareFromGroupUnregisteredGroup()
1065+
{
1066+
$this->router->removeMiddlewareFromGroup('web', ['test-middleware']);
1067+
1068+
$this->assertEquals([], $this->router->getMiddlewareGroups());
1069+
}
1070+
10231071
/**
10241072
* Get the last route registered with the router.
10251073
*

0 commit comments

Comments
 (0)