Laravel路由的奇怪行为

时间:2017-01-13 22:30:08

标签: laravel controller routing

我有两个资源控制器名为' livre-dor' (英文金书)和菜单,餐馆网站。它们都具有基本的CRUD功能,包括' index'' store','创建','显示','更新& #39;,'编辑'并且'销毁'。只是,我决定在delete方法中添加一个异常,因为我发现我需要为链接创建一个表单这一事实很烦人。

因此,对于两个控制器,我使用" destroy"进行了以下操作:动作:

/**
 * 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-dor'菜单' litteraly具有Goldenbook::find($id)Menu::find($id)之外的相同行。

在我的路由中,我做了以下内容:

Route::resource('livre-dor', 'GoldenbookController',['except' => ['destroy']]);
Route::get('/destroy/{id}', 'GoldenbookController@destroy')->name('livre-dor.destroy');
Route::resource('menus', 'MenusController', ['except' => ['destroy']]);
Route::get('/destroy/{id}', 'MenusController@destroy')->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&#39;通过删除,我们通过GET这是简单的waaaay(不要担心这将在以后保护)。当我第一次完成所有事情时,一切都有效,直到两天后我重新开始工作。

然而,现在,当我到达&lt; livre-dor&#39;索引,我得到以下内容:Route [livre-dor.destroy] not defined. (View: D:\PHPStormProject\nekoba\resources\views\livre-dor\index.blade.php),而&#39;菜单&#39;顺利出现。当我运行php artisan route:list时,我无法找到&lvre-dor.destroy&#39;任何地方:

Laravel Route List

另外,当我做php artisan route:cache时,它会破坏menus.destroy路线并添加我的路线。我无法找到这一切背后的逻辑。

提前感谢您,询问您是否需要查看其他内容

2 个答案:

答案 0 :(得分:1)

尝试在资源路由之前编写自定义销毁路由,希望它能够正常工作。

答案 1 :(得分:1)

Route::get('/destroy/{id}', 'GoldenbookController@destroy')->name('livre-dor.destroy');
Route::get('/destroy/{id}', 'MenusController@destroy')->name('menus.destroy');

您无法为2种不同的路由方法使用相同的URI。让它们有不同的名称,例如

Route::get('/livre-dor/destroy/{id}', 'GoldenbookController@destroy')->name('livre-dor.destroy');
Route::get('/menus/destroy/{id}', 'MenusController@destroy')->name('menus.destroy');