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

Ben*_*Ben 49 php routes laravel 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请求定义了一个路由,并在视图中正确设置了它.

我在这里俯瞰什么?

Joe*_*inz 81

在表单打开route()时调用的方法['route' => 'someroute']需要所谓的命名路径.你给路线一个这样的名字:

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

也就是说,您将路由的第二个参数设置为一个数组,您可以在其中指定路由名称(the as),以及路由命中时的操作(the uses).

然后,当您打开表单时,您将调用该路由:

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

现在,对于没有参数的路径,您可以这样做'route' => 'routename',但由于您有一个参数,因此您需要创建一个数组并按顺序提供参数.

所有这一切,因为您似乎正在更新当前用户的首选项,我建议您让处理控制器检查当前登录用户的ID,并将更新基于此 - 不需要发送id在网址和路由中,除非您的用户还需要更新其他用户的首选项.:)


小智 27

这个线程很老但是第一个出现,所以我认为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');
Run Code Online (Sandbox Code Playgroud)

改变名称可以解决问题.复制粘贴和疲劳会让你解决这个问题:).


ALe*_*ide 10

如果未定义route,则检查web.php路由文件.

Route::get('/map', 'NavigationController@map')->name('map'); // note the name() method.
Run Code Online (Sandbox Code Playgroud)

然后您可以在视图中使用此方法:

<a class="nav-link" href="{{ route('map') }}">{{ __('Map') }}</a>
Run Code Online (Sandbox Code Playgroud)

PS:__('Map')是将"Map"翻译成当前语言.

您可以使用artisan命令查看路由的名称列表:

php artisan route:list
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!感谢 `php artisan route:list` 我意识到在两个路由中我定义了相同的 URL:`'/same/url/in/both/routes'`。这就是为什么其中之一没有列在路线列表中的原因。 (2认同)

Jus*_*rty 10

我正在使用 Laravel 5.7 并尝试了上述所有答案,但似乎没有任何效果。

对我来说,删除 Laravel 创建的缓存文件是一个相当简单的修复。
似乎我的更改没有得到反映,因此我的应用程序没有看到路由。

有点矫枉过正,但我​​决定使用以下命令同时重置所有缓存:

php artisan route:clear
php artisan view:clear
php artisan cache:clear
Run Code Online (Sandbox Code Playgroud)

这里的主要命令是第一个删除bootstrap/cache/routes.php文件的命令。
第二个命令将删除存储在storage/framework/cache文件夹中的视图的缓存文件。
最后,最后一个命令将清除应用程序缓存。


DEE*_*PAK 6

当你执行命令时

php artisan route:list
Run Code Online (Sandbox Code Playgroud)

您将在那里以表格格式看到所有已注册的路线。好吧,您会看到许多列,例如 Method 、 URI 、 Name 、 Action .. 等。

所以基本上如果你使用route()方法,这意味着它只接受name列值,如果你想使用URI列值,你应该使用laravel 的url()方法。


Adi*_*lla 6

造成这种情况的另一个原因:

如果路由被相同的 URI(不知不觉)覆盖,则会导致此错误:

例如:

Route::get('dashboard', ['uses' => 'SomeController@index', 'as' => 'my.dashboard']);
Route::get('dashboard/', ['uses' => 'SomeController@dashboard', 'as' => 'my.home_dashboard']);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,路由“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']); 
Run Code Online (Sandbox Code Playgroud)

// 查看为这个“home-dashboard”更改的 URI

希望它能帮助一些人。


ent*_*rez 5

我的情况有点不同,因为它不是一种形式,而是返回一个视图。添加方法->name('route')

MyView.blade.php 看起来像这样:

<a href="{{route('admin')}}">CATEGORIES</a>
Run Code Online (Sandbox Code Playgroud)

web.php路线文件的定义如下:

Route::view('admin', 'admin.index')->name('admin');
Run Code Online (Sandbox Code Playgroud)