Я хотел бы знать, как добавить дополнительные параметры в ресурс маршрута Laravel без использования строк запроса.
Я создал контроллер (CustomerController) со всеми встроенными ресурсами, а затем добавил следующий маршрут:
Route::resource('customers', 'CustomerController');
Я бы хотел добавить дополнительные параметры к некоторым ресурсам по умолчанию без создания настраиваемых маршрутов или использования строк запроса. Например:
Ресурс по умолчанию с необязательным параметром (индексом):
public function index($page = 0)
{
//...
}
Желаемый URL:
http://www.example.com/customers
http://www.example.com/customers/{page}
Я пробовал следующее, но получаю исключение «Не найдено» (NotFoundHttpException):
Route::resource('customers', 'CustomerController')->parameters([
'index' => 'page'
]);
Это возможно? Если да, то как я могу этого добиться?






Контроллеры ресурсов должны реализовывать определенный набор методов, которые затем отображаются маршрутизатором на соответствующую команду HTTP и путь. Эти методы, пути и глаголы составляют часть контракта, который нельзя изменить, иначе работа с приложением Laravel, реализующим контроллеры ресурсов, была бы головной болью.
Контроллеры ресурсов превосходно обеспечивают одинаковый опыт во всех приложениях Laravel, если вашему приложению требуется поведение, которое не поддерживается из коробки контроллерами ресурсов, то это признак того, что вы не должны их использовать и должны вместо этого регистрировать свои маршруты вручную.
Если у вас есть только один маршрут, который должен реализовать настраиваемое поведение, вы можете зарегистрировать методы некоторый вместо всех, а затем выбрать регистрацию настраиваемого маршрута для вашего метода контроллеров ресурсов, например:
Route::resource('customers', 'CustomerController')->except([
'index'
]);
Route::get('/customers/{page?}', 'CustomerController@index');
Документация по Контроллеры ресурсов охватывает except и only.
Привет @sam, спасибо за подробное объяснение. Я использую ресурсы, потому что мне действительно не нужны какие-либо дополнительные функции, кроме тех, которые предоставляет Laravel. В этом случае я воспользуюсь вашим подходом. Еще раз спасибо :)
Попробуй это :
Route::resource('customers', 'CustomerController')->parameters([
'customers' => 'page'
]);
The example above generates the following URIs for the resource's show route:
/customers/{page}
вы устанавливаете имя маршрута: 'индекс' замените его переменной: 'клиенты' имя вашего ресурса
Это не обязательно отвечает на вопрос. Это просто переименовывает параметр маршрута в маршрутах с уже имеющимися параметрами. Вопрос направлен на добавление дополнительного параметра
Это противоречит тому, как
resourcesработает в Laravel. Вы можете исключить маршруты, которые хотите переопределить, и определить их вручную. Помните, Laravel самоуверен, но вы можете изменить его мнение, когда захотите.