Как адресовать переменное число аргументов в laravel маршрутах к контроллерам - PullRequest
0 голосов
/ 29 февраля 2020

Я новичок в Laravel, и я сделал что-то подобное для своих маршрутов:

Route::get('/fundraisers/{id}', 'FundraiserController@index')->name('fundraisers.list');
Route::get('/{locale}/fundraisers/{id}', 'FundraiserController@indexLang')->name('fundraisers.list.lang')->where(['locale'=>$loc=['fr,'zh']);

И затем мне нужно два метода в моем контроллере:

index($id) {
   // Load record by id and language == 'en'
}

indexLang($locale, $id) {
   // Load record by id and language == $locale
}

I в другом месте читайте, что нет никакого способа явно написать два правила маршрута, если я хочу, чтобы Engli sh url был единственным исключением, чтобы не появляться в URL.

Теперь, когда я пишу маршрут, подобный этому:

Route::get('/fundraisers/{id}', 'FundraiserController@indexLang')->name('fundraisers.list');

В результате получается, что $locale - это число, а $id равно нулю в indexLang. Есть ли способ сделать что-то вроде присвоения {id} для $_REQUEST['id'] и иметь $_REQUEST['locale'] неустановленным? Как, например, с правилами .htaccess переписывания URL-адресов? Таким образом, я могу избавиться от index($id), поскольку это избыточное исключение indexLang

1 Ответ

0 голосов
/ 29 февраля 2020

Я не вижу ничего плохого в вашей первой попытке, кроме where, который должен быть регулярным выражением.

Route::get('/{locale}/fundraisers/{id}', 'FundraiserController@indexLang')->name('fundraisers.list.lang')->where(['locale' => 'fr|zh']);

Так что попробуйте.

Причина второй попытки для "$locale - это число, а $id - ноль" - потому что вы " перехватывает только один на маршруте, т.е. '/fundraisers/{id}', который затем передается первой переменной контроллера, в данном случае $locale.

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