#php #laravel #routes
Вопрос:
Возможно ли в Laravel 8 не указывать маршрутизацию для методов в классе, то есть, чтобы они работали автоматически?
Допустим, есть класс CreateController
и методы
function doc() {...}
function pdf() {...}
function xls() {...}
То есть при доступе к URL-адресу по адресу формы site.com/create/doc он разработал метод doc
класса CreateController
Или такой возможности нет, и вам придется зарегистрировать маршрут для каждого метода, то есть
Route::get('/create/doc', 'CreateController@doc');
Route::get('/create/pdf', 'CreateController@pdf');
Route::get('/create/xls', 'CreateController@xls');
...
Комментарии:
1. Попробуйте петлю for?
2. Маршрут::get («/create/{type}», «CreateController@create»); передача типа функции create может быть альтернативным способом
Ответ №1:
Не непосредственно во втором строковом параметре, но если вы сделаете этот параметр функцией обратного вызова:
Route::get('/create/{type}', function(string $type) {
return (new CreateController)->{$type}();
})->where('type', 'doc|pdf|xls');
Если вы хотите разрешить все методы как тип и сохранить их динамическими, чтобы вы могли добавлять или удалять контроллер без редактирования маршрутов:
$class = new ReflectionClass(CreateController::class);
$methods = $class->getMethods(ReflectionMethod::IS_PUBLIC);
Route::get('/create/{type}', function(string $type) {
return (new CreateController)->{$type}();
})->where('type', implode('|', $methods));
Комментарии:
1. Спасибо, что это сработало для меня В первом примере, вам нужно использовать «использовать приложениеHttpКонтроллерыCreateController»; в противном случае будет класс ошибок «CreateController» не найден
2. @СергейБарахтенко Да , вы должны импортировать его или поставить обратную косую черту CreateController