#laravel #dependency-injection #routes
#laravel #внедрение зависимостей #маршруты
Вопрос:
Я использую Laravel 5.8, и у меня есть модель с именем из двух слов, скажем, CurrencyNetwork, и я хочу использовать волшебную инъекцию зависимостей laravel, как показано ниже:
Route::get('edit/{currency_networks}', ['as' => 'edit', 'uses' => 'NetworkController@edit']);
И в моем контроллере я использую:
public function edit(CurrencyNetwork $network)
{
//some action goes here
}
Но экземпляр модели не разрешается, и вместо этого я получаю пустую модель.
Есть ли способ заставить это работать?
Редактировать: я смог обойти это, зарегистрировав параметр в RouteServiceProvider, например:
Route::model('currency_networks', CurrencyNetwork::class);
Мне было интересно, есть ли способ для Laravel связать модель самостоятельно?
Ответ №1:
Вы должны сопоставить имя аргумента, указывающего на тип метода, с тем же именем, что и параметр / сегмент маршрута:
«Laravel автоматически разрешает красноречивые модели, определенные в маршрутах или действиях контроллера, имена переменных с указанием типа которых соответствуют имени сегмента маршрута».
// 'edit/{currency_networks}'
public function edit(CurrencyNetwork $currency_networks)
Если вы хотите, чтобы это было $network
так, измените имя параметра в маршруте:
Route::get('edit/{network}', ...);
public function edit(CurrencyNetwork $network)
Документы Laravel 8.x — Маршрутизация — Привязка модели маршрута — Неявные привязки
Комментарии:
1. Спасибо. Я не совсем понял предыдущий абзац.