Внедрение зависимостей для сложных имен моделей в маршрутизации Laravel

#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. Спасибо. Я не совсем понял предыдущий абзац.