Предоставляя URL, я хотел бы знать, есть ли способ определить, существует ли URL в моем приложении Laravel (по сравнению с «Как я могу проверить, существует ли URL через Laravel?«который хочет проверить внешний URL)?
Я пробовал это, но он всегда говорит мне, что URL не совпадает:
$routes = \Route::getRoutes();
$request = \Request::create('/exists');
try {
$routes->match($request);
// route exists
} catch (\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e){
// route doesn't exist
}
В одном из моих приложений Laravel я достиг этого, выполнив следующее
private function getRouteSlugs()
{
$slugs = [];
$routes = Route::getRoutes();
foreach ($routes as $route)
{
$parts = explode('/', $route->uri());
foreach ($parts as $part)
{
$slug = trim($part, '{}?');
$slugs[] = $slug;
}
}
return array_unique($slugs);
}
Эта функция поможет получить всех слагов, которые зарегистрированы в Laravel, а затем с помощью простого in_array
Вы можете проверить, был ли этот слизень зарезервирован.
РЕДАКТИРОВАТЬ
На основании вашего комментария вы можете расширить следующую функцию
private function getRouteSlugs()
{
$slugs = [];
$routes = Route::getRoutes();
foreach ($routes as $route)
{
$slugs[] = $route->uri();
}
return array_unique($slugs);
}
Это даст вам массив предметов как таковой:
0 => "dashboard/news"1 => "dashboard/post/news"2 => "dashboard/post/news/{id}"3 => "dashboard/post/news"
Это должно быть достаточно просто для сравнения.
Других решений пока нет …