TL; DR
Я хотел бы предложить вам использовать URL restaurants/25/admins
вместо ресторанов/админов/25, так что объекты упорядочены от большого к малому, то есть рестораны -> один ресторан -> админ ресторана. Итак, для этого ответа я буду использовать:
<a href="{{ URL::to('restaurants/25/admins') }}">
Тогда в вашем маршруте вы можете сделать:
Route::get('restaurants/{id}/admins'), '[email protected]');
Route::resource('restaurants', 'RestaurantsController');
И в коде контроллера, вы делаете:
class RestaurantsController
{
// your code for index(), show(), etc...
public function admins($id)
{
// Whatever you want Laravel to do for /restaurants/{id}/admins
}
}
Долгосрочный ответ:
Позвольте мне немного пояснить, что делает resource controller
. В Laravel, когда вы делаете:
Route::resource('restaurants', 'RestaurantsController');
Это более или менее помощник, который автоматически расширяется в них:
Route::get ('restaurants', '[email protected]');
Route::get ('restaurants/{id}', '[email protected]');
Route::get ('restaurants/create', '[email protected]');
// There are a few more generated. See http://laravel.com/docs/controllers#resource-controllers
Как вы наверное знаете, первый маршрут для отображения всех ресторанов. Второй маршрут предназначен для отображения конкретного ресторана. Третий для отображения формы для добавления ресторана.
Следует отметить, что Laravel просто генерирует эти маршруты, поэтому вам не нужно много раз писать много маршрутов. То, что вы пишете в методах контроллера (функции a.k.a.), полностью зависит от вас. Вы можете сделать свой /restaurants
показать форму для добавления ресторанов, а /restaurants/create
показать список ресторанов. Но это разрушает назначение контроллеров ресурсов, потому что предполагается, что вы будете писать код проще и короче, хотя и быть понятным!
Итак, если мы согласны с тем, что делает Laravel.При этом один линии маршрута:
Route::resource('restaurants', 'RestaurantsController');
вы получаете URL, зарезервированный для отображения всех ресторанов (/restaurants
), другой URL для отображения конкретного ресторана (/restaurants/{id}
), а другой URL для формы, чтобы добавить новый ресторан (/restaurants/create
). Примечание: Есть 7 маршрутов, но я упоминаю только 3 здесь для краткости.
Если я правильно понимаю, то, что вы пытаетесь сделать, это добавить еще одну функцию. Вам нужна страница, которая отображает список администраторов для ресторана. Это то, что не соответствует 3 URL-адресам, которые у нас есть, поэтому вы решили создать еще один, например. restaurants/admins/25
.
Моя первая рекомендация вам в том, что при структурировании URL-адреса попробуйте организовать от самого большого объекта до наименьшего. Ваш оригинальный restaurants/admins/25
переводится примерно на:
Restaurants > Admins of a restaurant > One restaurant
Если бы я тебя, я бы что-то вроде этого:
Restaurants > One restaurant > Admins of a restaurant
Так вместо ресторанов/админов/25 мой URL будет:
<a href="{{ URL::to('restaurants/25/admins') }}">
Вы чувствуете разницу? Теперь у нас есть URLs, которые являются гораздо более понятным:
restaurants <-- show all restaurants
restaurants/25 <-- show restaurant #25
restaurants/25/admins <-- show admins in restaurant #25
restaurants/create <-- show form to create a new restaurant
Теперь файлу маршрут нужна только дополнительная строка для поддержки admins
которая является нашим настраиваемым действием:
Route::get('restaurants/{id}/admins'), '[email protected]');
Route::resource('restaurants', 'RestaurantsController');
И в коде контроллера, вы делаете:
class RestaurantsController
{
// your code for index(), show(), etc...
public function admins($id)
{
// Whatever you want Laravel to do for /restaurants/{id}/admins
}
}
с этого момента, вы можете добавить /restaurants/25/info
, /restaurants/25/photos
и т.д., как вам нравится так же, как описано выше.
Я думаю, вам нужно сказать нам, чего вы пытаетесь достичь, например. что «админы» имеют отношение к остальной части вашего кода, на какой странице вы хотите установить ссылку. – Unnawut
@Unnawut Я пытаюсь вызвать указанный url, но я получил заявленное исключение –
Да, но какие 'рестораны/админы/25' должны делать, когда вы обращаетесь к нему, какова функция/метод, который следует вызывать, и т. Д. – Unnawut