Laravel 5.6 дополнительные параметры Route :: resource ()

Я хотел бы знать, как добавить дополнительные параметры в ресурс маршрута 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'
]);

Это возможно? Если да, то как я могу этого добиться?

Это противоречит тому, как resources работает в Laravel. Вы можете исключить маршруты, которые хотите переопределить, и определить их вручную. Помните, Laravel самоуверен, но вы можете изменить его мнение, когда захотите.

Ohgodwhy 17.04.2018 01:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
9
1
16 542
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Контроллеры ресурсов должны реализовывать определенный набор методов, которые затем отображаются маршрутизатором на соответствующую команду HTTP и путь. Эти методы, пути и глаголы составляют часть контракта, который нельзя изменить, иначе работа с приложением Laravel, реализующим контроллеры ресурсов, была бы головной болью.

Контроллеры ресурсов превосходно обеспечивают одинаковый опыт во всех приложениях Laravel, если вашему приложению требуется поведение, которое не поддерживается из коробки контроллерами ресурсов, то это признак того, что вы не должны их использовать и должны вместо этого регистрировать свои маршруты вручную.

Если у вас есть только один маршрут, который должен реализовать настраиваемое поведение, вы можете зарегистрировать методы некоторый вместо всех, а затем выбрать регистрацию настраиваемого маршрута для вашего метода контроллеров ресурсов, например:

Route::resource('customers', 'CustomerController')->except([
    'index'
]);

Route::get('/customers/{page?}', 'CustomerController@index');

Документация по Контроллеры ресурсов охватывает except и only.

Привет @sam, спасибо за подробное объяснение. Я использую ресурсы, потому что мне действительно не нужны какие-либо дополнительные функции, кроме тех, которые предоставляет Laravel. В этом случае я воспользуюсь вашим подходом. Еще раз спасибо :)

Ricky 17.04.2018 17:21

Попробуй это :

Route::resource('customers', 'CustomerController')->parameters([
    'customers' => 'page'
]);
The example above generates the following URIs for the resource's show route:

/customers/{page}

вы устанавливаете имя маршрута: 'индекс' замените его переменной: 'клиенты' имя вашего ресурса

Это не обязательно отвечает на вопрос. Это просто переименовывает параметр маршрута в маршрутах с уже имеющимися параметрами. Вопрос направлен на добавление дополнительного параметра

emmaakachukwu 08.02.2021 07:10

Другие вопросы по теме