Laravel работа с маршрутами
Как в Laravel можно получить класс по наименованию роута, который его должен обрабатывать, НЕ текущего роута? Предполагаю решение: взять список всех маршрутов и перебором найти, но мне не нравится такой подход. Должен быть статический метод, которым можно получить информацию о
Например, есть такой маршрут:
Route::get('/office/{id}', "OfficeController@PageInfo")->name('office_info_page');
Где-нибудь в хелпере я знаю имя этого маршрута office_info_page. Мне нужно вызвать метод method() этого класса например, OfficeController::method() зная только имя роута.
В документации нашёл только сведения о текущем роуте.
Ответы (2 шт):
Например так, если правильно понял задачу. Создаёте конфиг в котором будут храниться маршруты и контроллеры которые их обрабатывают таким образом(для примера):
//routes.php (например)
...
'callback_routes' => [
'office_info_page' => Foo::class,
...
'route_name' => Bar::class
]
Далее в OfficeController в методе method (можно выделить в родительский класс) пишите что-то типа такого:
use Illuminate\Support\Facades\Route;
class OfficeController {
...
public function method()
{
$route = Route::current();
$name = $route->action['as'] ?? null;
if (!$name) return response('Укажите имя маршрута');
$className = config('routes.callback_routes.'.$name);
$classCallback = new $className;
...
return ...;
}
Ковырялся и нашёл ещё способ:
foreach (Route::getRoutes() as $route)
{
if(isset($route->action['as']) && $route->action['as'] == 'office_info_page')
{
dd($route->action['controller']);
}
}
Решение не качественное, сломается, если в роуте прописать "as" по другому