Laravel 说“路线未定义”

新手上路,请多包涵

在我的 routes.php 中,我有:

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

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

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

但我收到了这个错误:

路线 [/preferences/1] 未定义

直接调用 route() 助手时会出现类似的错误:

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

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

原文由 Ben Fransen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 383
2 个回答

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

 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,并以此为基础进行更新 - 无需发送 id在 url 和路由中,除非您的用户也需要更新其他用户的首选项。 :)

原文由 Joel Hinz 发布,翻译遵循 CC BY-SA 3.0 许可协议

还有一个原因:

如果 路由被相同的 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']);

// 查看这个 ‘home-dashboard’ 的 URI 已更改

希望它可以帮助一些人。

原文由 Adiyya Tadikamalla 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题