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