Почему только первый контроллер работает в Laravel - PullRequest
0 голосов
/ 31 октября 2018

У меня есть 2 контроллера в Laravel как

Route::get('/books/{slug}', 'BooksController@slugShow');
Route::get('/books/{alphabet}', 'BooksController@showByAlphabet');

Оба контроллера работают нормально при использовании только одного, но когда я помещаю их оба в файл Routs, работает только первый.

URL-адреса пули похожи на

https://www.example.com/books/once_upon_a_time

и URL-адреса алфавитов - это список книг, начинающихся с алфавита

https://www.example.com/books/a

Как я могу заставить их работать, и я также хочу, чтобы URL-адреса алфавитов не работали, если в URL-адресе более одного символа, например

https://www.example.com/books/aa
or
https://www.example.com/books/once

Ответы [ 4 ]

0 голосов
/ 01 ноября 2018

Когда вы используете маршруты как

Route::get('/books/{slug}', 'BooksController@slugShow');
Route::get('/books/{alphabet}', 'BooksController@showByAlphabet');

В обоих маршрутах /books/{id} читается laravel, таким образом, {slug} и {alphabet} принимаются как id. Для использования другого метода URL может быть изменен как /books/slug/{slug}, а для алфавитов /books/alphabets/{alphabet}.

Таким образом, вы можете правильно использовать оба URL, и будет вызван метод.

0 голосов
/ 31 октября 2018

Вы должны изменить маршрут и попробовать его.

Route::get('/books/alphabet/{alphabet}', 'BooksController@showByAlphabet');

Поскольку вы передали один и тот же URl, и приложение не может использовать одно и то же имя маршрута.

0 голосов
/ 31 октября 2018

Используйте вот так

Route::get('/books/{alphabet}', 'BooksController@showByAlphabet')->where(['alphabet' => '[a-z]{1,1}']);
Route::get('/books/{slug}', 'BooksController@slugShow');

Когда маршрут {alphabet} недействителен, он возвращается к слагу.

0 голосов
/ 31 октября 2018

шаблоны идентичны ... в этом проблема. Вы можете добавить условие «Где» к вашему маршруту, чтобы ограничить до 1 символа для алфавита

Route::get('/books/{alphabet}', 'BooksController@showByAlphabet')->where(['alphabet' => '[a-z]']);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...