функция ресурсов laravel работает правильно, но когда я использую ее вручную, она не работает

#laravel #laravel-routing

#laravel #laravel-маршрутизация

Вопрос:

я использую laravel 5 , когда я использую Route::resource функцию laravel в своем route.php файле, я могу получить свою коллекцию моделей внутри параметра моего метода следующим образом:

      //**web.php** file

     Route::resource('factors', 'FactorsController');

     //called url localhost:8000/factors/1/edit

     //**FactorsController**

     /**
     * @param Request $request
     * @return IlluminateContractsViewFactory|IlluminateViewView
     */
     public function edit(Request $request, Factor $factor)
     {
         //$factor is a collection of Factor Model that contains id '1' information in factor table

         return view('factors.edit', compact('factor'));
     }
  

это правильно и работает, но когда я создаю пользовательский URL, подобный этому:

 Route::get('factors/{id}/newEdit', 'FactorsController@newEdit');
  

я не могу получить коллекцию внутри параметров метода, и она возвращает пустую коллекцию следующим образом:

  //called url localhost:8000/factors/1/newEdit

 1)
 //**FactorsController**

 /**
 * @param Request $request
 * @return IlluminateContractsViewFactory|IlluminateViewView
 */
 public function newEdit(Request $request, Factor $factor)
 {
     return view('factors.newEdit', compact('factor'));
 }
  

$factor это пустая коллекция Factor Model , но я хочу, чтобы моя выбранная строка была в базе данных. когда я использую это так, это работает правильно:

  2)
 //**FactorsController**

 /**
 * @param Request $request
 * @return IlluminateContractsViewFactory|IlluminateViewView
 */
 public function newEdit(Request $request, $id)
 {
     $factor = Factor::find($id);

     return view('factors.newEdit', compact('factor'));
 }
  

но я не хочу называть это как 2, я хочу называть это как 1

спасибо за любую помощь.

Ответ №1:

Для привязки модели у вас должны быть имена переменных с указанием типа, соответствующие имени сегмента маршрута :

 Route::get('factors/{factor}/newEdit', 'FactorsController@newEdit');
  

Поскольку $factor переменная указывается как Factor модель, а имя переменной соответствует сегменту {factor} URI, Laravel автоматически вводит экземпляр модели, идентификатор которого соответствует соответствующему значению из URI запроса.

Комментарии:

1. get перед ресурсом, а маршрут правильный. проблема в том, что я хочу, чтобы мой выбранный фактор, но он возвращает пустую коллекцию.

2. Маршрут ремесленника: команда списка… Как выглядят маршруты?