Laravel 5路线未定义,而它是?

时间:2015-02-25 08:48:49

标签: php laravel routes laravel-5

我对这应该如何工作有点困惑。但是我收到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请求定义了一个路由,并在视图中正确设置了它。

我在这里俯瞰什么?

11 个答案:

答案 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生成)