Skip to content

Commit ca4b2e9

Browse files
authored
Fix duplicate route name causing LogicException on route:cache (riasvdv#259) (riasvdv#260)
Replace separate POST and PATCH routes for /{id} with Route::match() to avoid duplicate 'update' route name. Add regression test verifying no duplicate route names and both HTTP methods are supported.
1 parent 94ee668 commit ca4b2e9

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

routes/cp.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@
4545
Route::post('actions/run/list', [RedirectActionController::class, 'bulkActions'])->name('actions.bulk');
4646

4747
Route::get('/{id}', [RedirectController::class, 'edit'])->name('edit');
48-
Route::post('/{id}', [RedirectController::class, 'update'])->name('update');
49-
Route::patch('/{id}', [RedirectController::class, 'update'])->name('update');
48+
Route::match(['post', 'patch'], '/{id}', [RedirectController::class, 'update'])->name('update');
5049
Route::delete('/{id}', [RedirectController::class, 'destroy'])->name('delete');
5150
});
5251
});

tests/Feature/RouteCacheTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
it('does not have duplicate route names', function () {
4+
// Regression test for https://github.com/riasvdv/statamic-redirect/issues/259
5+
// Previously, both POST and PATCH /{id} routes were named 'update',
6+
// causing a LogicException when running route:cache.
7+
8+
$routes = app('router')->getRoutes();
9+
$names = collect($routes->getRoutesByName())
10+
->keys()
11+
->filter(fn (string $name) => str_starts_with($name, 'statamic.cp.redirect.'));
12+
13+
expect($names)->not->toBeEmpty();
14+
expect($names->duplicates())->toBeEmpty();
15+
16+
$updateRoute = collect($routes->getRoutes())
17+
->first(fn ($route) => str_contains($route->getName() ?? '', 'redirect.redirects.update'));
18+
19+
expect($updateRoute)->not->toBeNull();
20+
expect($updateRoute->methods())->toContain('POST');
21+
expect($updateRoute->methods())->toContain('PATCH');
22+
});

0 commit comments

Comments
 (0)