Laravel 8: маршрутизация

#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