我对这应该如何工作有点困惑。但是我收到Route [/preferences/1] not defined
错误。
在我的routes.php中,我有:
Route::patch('/preferences/{id}', 'UserController@update');
在视图文件(account / preferences.blade.php)中,我有:
{!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => '/preferences/' . Auth::user()->id]) !!}
我收到错误告诉我路线不存在。我认为我误解了关于这个主题的文档,但在我看来,我已经为给定参数的PATCH请求定义了一个路由,并在视图中正确设置了它。
我在这里俯瞰什么?
答案 0 :(得分:76)
在表单打开时执行route()
时调用的['route' => 'someroute']
方法需要所谓的命名路由。你给路线命名如下:
Route::patch('/preferences/{id}',[
'as' => 'user.preferences.update',
'uses' => 'UserController@update'
]);
也就是说,您将路由的第二个参数设置为一个数组,您可以在其中指定路由名称(as
),以及命中路由时的操作({{1} })。
然后,当您打开表单时,请调用路径:
uses
现在,对于没有参数的路线,您可以只执行{!! Form::model(Auth::user(), [
'method' => 'PATCH',
'route' => ['user.preferences.update', Auth::user()->id]
]) !!}
,但由于您有参数,因此您需要创建一个数组并按顺序提供参数。
所有这一切,因为您似乎正在更新当前用户的首选项,我建议您让处理控制器检查当前登录用户的ID,并将更新基于此 - 不需要发送在网址和路由中的ID中,除非您的用户还需要更新其他用户的首选项。 :)
答案 1 :(得分:23)
这个帖子很老但是第一个出现,所以我认为id也分享了我的解决方案。除了在routes.php文件中命名路由。如果路由文件中有重复的URL,也会发生此错误,但在此方案中,如果错误名称不同,则错误可能会产生误导。示例
Route::any('official/form/reject-form}', 'FormStatus@rejectForm')->name('reject-form');
Route::any('official/form/accept-form', 'FormStatus@acceptForm')->name('reject-form');
更改名称可以解决问题。复制粘贴和疲劳会让你解决这个问题:)。
答案 2 :(得分:6)
另一个原因:
如果路由被相同的URI覆盖(不知不觉),则会导致此错误:
例如:
Route::get('dashboard', ['uses' => 'SomeController@index', 'as' => 'my.dashboard']);
Route::get('dashboard/', ['uses' => 'SomeController@dashboard', 'as' => 'my.home_dashboard']);
在这种情况下,路由“ my.dashboard”无效,因为这两个路由具有相同的URI(“ dashboard”,“ dashboard /”)
解决方案:您应该更改其中一个的URI
例如:
Route::get('dashboard', ['uses' => 'SomeController@index', 'as' => 'my.dashboard']);
Route::get('home-dashboard', ['uses' => 'SomeController@dashboard', 'as' => 'my.home_dashboard']);
//查看此“主页仪表板”的URI更改
希望它可以帮助一些人。
答案 3 :(得分:5)
如果未定义route,请检查web.php路由文件。
Route::get('/map', 'NavigationController@map')->name('map'); // note the name() method.
然后您可以在视图中使用此方法:
<a class="nav-link" href="{{ route('map') }}">{{ __('Map') }}</a>
PS:__(&#39; Map&#39;)是翻译&#34; Map&#34;以当前的语言。
您可以使用artisan命令查看路线的名称列表:
php artisan route:list
答案 4 :(得分:3)
我遇到了同样的问题并且最近找到了解决方案。
你应该检查你的路线是否在route :: group
内喜欢这里:
Route::group(['prefix' => 'Auth', 'as' => 'Auth.', 'namespace' => 'Auth', 'middleware' => 'Auth']
如果是这样,你应该在视图文件中使用它。像这里:
!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => 'Auth.preferences/' . Auth::user()->id]) !!}
答案 5 :(得分:3)
我的情况有点不同,因为它不是表单而是返回视图。添加方法->name('route')
。
MyView.blade.php
看起来像这样:
<a href="{{route('admin')}}">CATEGORIES</a>
web.php
路由文件的定义如下:
Route::view('admin', 'admin.index')->name('admin');
答案 6 :(得分:2)
就我而言,解决方案很简单:
我已在route.php
文件的最开头定义了路径。
将命名路线移到底部后,我的应用终于看到了它。 这意味着路线定义得太早了。
答案 7 :(得分:1)
旁注:
我遇到了类似的问题,很多时候我没有找到错误的Action方法,但很明显它是在控制器中定义的。
问题不在于控制器,而是如何设置routes.php文件
假设您已将Controller类设置为route.php文件中的资源
Route::resource('example', 'ExampleController');
然后&#39; / example&#39;将在此处列出所有RESTful资源: http://laravel.com/docs/5.0/controllers#restful-resource-controllers
但是现在你想要在形式上有一些定义,例如:&#39; action&#39; =&gt;&#39; ExampleController @ postStore&#39;那么你必须将此路由(在route.php文件中)更改为:
Route::controller('example', 'ExampleController');
答案 8 :(得分:1)
我正在使用Laravel 5.7并尝试了上述所有答案,但似乎什么都没找到。
对我来说,这是一个相当简单的修复方法,它删除了Laravel创建的缓存文件。
似乎我的更改没有得到反映,因此我的应用程序没有看到路线。
有点矫over过正,但是我决定使用以下命令同时重置所有缓存:
php artisan route:clear
php artisan view:clear
php artisan cache:clear
这里的主要命令是第一个将删除bootstrap/cache/routes.php
文件的命令。
第二条命令将删除storage/framework/cache
文件夹中存储的视图的缓存文件。
最后,最后一条命令将清除应用程序缓存。
答案 9 :(得分:1)
执行命令时
php artisan route:list
您将在那里以表格格式看到所有已注册的路线。 在那里,您会看到许多列,例如Method,URI,Name,Action等。
因此,基本上,如果您使用的是 route()方法,这意味着它将仅接受 name 列值,以及是否要使用 URI 列值,应使用laravel的 url()方法。
答案 10 :(得分:0)
请注意,命令
php artisan route:list
或者获取更多过滤列表
php artisan route:list | grep your_route|your_controller
第四列告诉您已注册的路由的名称(通常由Route :: resource生成)