我一直在做一个CRUD
en Laravel
,它给了我一个无法定位的错误,因为我没有任何被调用的函数Show
。
用户控制器:
public function destroy($id_usuario)
{
$user = Usuario::find($id_usuario);
$user->delete();
Flash::warning('Se ha eliminado ' .$user->nombre . 'de forma correcta');
return redirect()->route('users.index');
}
索引刀片.php
<a href="{{ route('users.destroy', $user->id_usuario) }}" class="btn btn-warning"><span class="glyphicon glyphicon-remove-circle" aria-hidden="true" onclick="return confirm('¿Seguro que quieres borrarlo')"></span></a>
网页.php
Route::group(['prefix' => 'admin'], function(){
Route::resource('users','Userscontroller');
Route::get('users/{id_usuario}/destroy', [
'uses' => 'UsersController@destroy',
'as' => 'admin.users.destroy'
]);
});
当您使用时,
Route::resource()
您正在为所述控制器创建七个路由:这些方法中的每一个都在控制器中使用特定的动词和方法,如文档中的示例
PhotoController
。在这种情况下发生的情况是,当您单击带有路由
users/{id_usuario}/destroy
和 GET 动词的链接时,Laravel 会找到您创建的路由之前/users/{id_usuario}
生成的显示路由。Route::resource()
为什么会这样?Laravel 中的路由从上到下按“顺序”读取,一旦找到动词匹配并且“部分”或完整参数与路由匹配,它将使用它。
换句话说,当你点击链接时,Laravel 会检查 GET,然后在调用 show 方法的路由上找到匹配,这要归功于
users/{id_usuario}
,而路由的其余部分 (.../destroy
) 将被忽略。解决方案:
按照 Laravel 的建议,在进行销毁时使用 DELETE 动词,为此您可以使用表单调用链接,如下所示:
重新排序路线,以便 Laravel 先找到您的路线,然后再找到资源路线:
告诉 Laravel 不要生成 show 方法使用的路由:
文档中的更多信息:https ://laravel.com/docs/5.4/controllers#resource-controllers