Laravel说“路线未定义”

2022-08-30 08:41:14

在我的路线中.php我有:

Route::patch('/preferences/{id}', 'UserController@update');

在视图文件(account/preferences.blade.php)中,我有:

{!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => '/preferences/' . Auth::user()->id]) !!}

但是我得到这个错误:

未定义路由 [/首选项/1]

直接调用帮助程序时会发生类似的错误:route()

route('/preferences/' . Auth::user()->id');

我想我误解了关于这个主题的文档,但是我已经为具有给定参数的PATCH请求定义了一个路由,并在视图中正确设置了它。我在这里忽略了什么?


答案 1

当您在窗体打开中执行此操作时,将调用该方法,该方法需要所谓的命名路由。您为路由指定如下名称:route()['route' => 'someroute']

Route::patch('/preferences/{id}',[
    'as' => 'user.preferences.update',
    'uses' => 'UserController@update'
]);

也就是说,将路由的第二个参数放入数组中,在其中指定路由名称 (the ) 以及命中路由时要执行的操作 (the )。asuses

然后,当您打开窗体时,您调用路由:

{!! Form::model(Auth::user(), [
    'method' => 'PATCH',
    'route' => ['user.preferences.update', Auth::user()->id]
]) !!}

现在,对于没有参数的路由,您可以只做 ,但是由于您有一个参数,因此您可以创建一个数组并按顺序提供参数。'route' => 'routename'

总而言之,由于您似乎正在更新当前用户的首选项,因此我建议您让处理控制器检查当前登录用户的ID,并以此为基础进行更新 - 除非您的用户也需要更新其他用户的首选项,否则无需在URL和路由中发送id。:)


答案 2

这个线程很旧,但是是第一个出现的线程,所以我认为id也分享了我的解决方案。除了在文件中命名路由。如果路由文件中有重复的 URL,但名称不同,则此错误在这种情况下可能会产生误导,因此也会发生此错误。例:routes.php

Route::any('official/form/reject-form', 'FormStatus@rejectForm')
                                           ->name('reject-form');  

Route::any('official/form/accept-form', 'FormStatus@acceptForm')
                                           ->name('accept-form');

更改其中一个名称可以解决问题。复制,粘贴和疲劳会导致你:)这个问题。


推荐