2017-01-13 4 views
0

У меня есть два контроллера ресурсов по имени «livre-dor» (золотая книга на английском языке) и меню для веб-сайта ресторана. Оба они имеют базовую функцию CRUD с «индексом», «магазином», «создавать», «показывать», «обновлять», «редактировать» и «уничтожать». Только, я решил добавить исключение в метод удаления, потому что я нахожу раздражающим тот факт, что мне нужно создать форму только для ссылки.Странное поведение с маршрутизацией Laravel

Таким образом, для обоих контроллеров, я сделал следующее с действием «уничтожить»:

/** 
* Remove the specified resource from storage. 
* 
* @param int $id 
* @return \Illuminate\Http\Response 
*/ 
public function destroy($id) 
{ 
    $message = Goldenbook::find($id); 
    $message->delete(); 
    session()->flash('message', 'Message supprimé'); 
    return redirect('livre-dor'); 
} 

Это для «Livre-Дор», litteraly «меню» имеет те же строки, освобожденного для Goldenbook::find($id) это будет Menu::find($id).

В моей маршрутизации, я сделал следующее:

Route::resource('livre-dor', 'GoldenbookController',['except' => ['destroy']]); 
Route::get('/destroy/{id}', '[email protected]')->name('livre-dor.destroy'); 
Route::resource('menus', 'MenusController', ['except' => ['destroy']]); 
Route::get('/destroy/{id}', '[email protected]')->name('menus.destroy'); 

И в обоих моих взглядов, я сделал следующее:

index.blade.php

<tbody> 
     @foreach($messages as $message) 
      <tr> 
       <td> 
        {{ $message->nom }} 
       </td> 
       <td> 
        {{ $message->message }} 
       </td> 
       <td> 
        <a href="{{route('livre-dor.destroy', $message->id)}}">Supprimer</a> 
       </td> 
      </tr> 
     @endforeach 
    </tbody> 

Так , таким образом, вместо перехода на «livre-dor.destroy» с помощью delete, мы будем проходить через GET, который будет проще (не беспокойтесь, это будет защищено позже). Когда я впервые сделал все это, все работало, пока я не вернулся к работе над ним два дня спустя.

Однако теперь, когда я добираюсь до индекса «livre-dor», я получаю следующее: Route [livre-dor.destroy] not defined. (View: D:\PHPStormProject\nekoba\resources\views\livre-dor\index.blade.php), в то время как «меню» отображается гладко. И когда я бегу php artisan route:list, я не могу найти 'Livre-dor.destroy' в любом месте:

Laravel Route List

Кроме того, когда я сделал php artisan route:cache, он уничтожил menus.destroy маршрут и добавил шахту. Я не могу найти логику всего этого.

Спасибо заранее, спросите, если вы хотите увидеть что-то еще

ответ

1
Route::get('/destroy/{id}', '[email protected]')->name('livre-dor.destroy'); 
Route::get('/destroy/{id}', '[email protected]')->name('menus.destroy'); 

Вы не можете иметь одинаковые URI для двух разных методов маршрута. Имейте их с разными именами, например.

Route::get('/livre-dor/destroy/{id}', '[email protected]')->name('livre-dor.destroy'); 
Route::get('/menus/destroy/{id}', '[email protected]')->name('menus.destroy'); 
+0

Спасибо, я до сих пор не понимаю, почему это и как там я догадываюсь, но он работает сейчас – Jaeger

+0

Пожалуйста '/ уничтожить/7' - что вы делаете ???? ...... . Поэтому. –

1

Попробуйте писать пользовательские уничтожить маршрут, прежде чем маршрут ресурсов, мы надеемся, он будет работать.

Смежные вопросы