larvel 路由未生效_php-Laravel 5路由未定义,虽然是?

在使用Laravel 5时,遇到一个关于路由未定义的错误,即尝试使用PATCH方法更新用户偏好时,系统提示路由不存在。在routes.php文件中已经定义了PATCH请求的路由,但在视图文件中提交表单时仍然报错。解决方案包括:1) 在路由定义中使用'as' => 'route_name'命名路由;2) 在表单模型绑定中使用命名路由的数组形式;3) 检查是否存在路由名冲突;4) 清除路由缓存;5) 确保路由定义的位置正确;6) 使用'php artisan route:list'命令检查已注册的路由。
摘要由CSDN通过智能技术生成

php-Laravel 5路由未定义,虽然是?

我对应该如何工作感到有些困惑。 但是我收到{!! Form::model(Auth::user(), ['method' => 'PATCH', 'route' => '/preferences/' . Auth::user()->id]) !!}错误。

在我的routes.php中,我有:

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

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

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

我收到一条错误消息,告诉我该路线不存在。 我认为我对该主题的文档有误解,但我认为我已使用给定参数定义了PATCH请求的路由,并在视图中正确设置了此路由。

我在这里俯瞰什么?

10个解决方案

79 votes

在表单打开中执行uses时将调用'route' => 'routename'方法,该方法需要所谓的命名路由。 您给路由指定这样的名称:

Route::patch('/preferences/{id}',[

'as' => 'user.preferences.update',

'uses' => 'UserController@update'

]);

也就是说,您将路由的第二个参数放入数组,在其中您既可以指定路由名称('route' => 'routename'),也可以在命中该路由时执行的操作(uses)。

然后,当您打开表单时,请调用以下路线:

{!! Form::model(Auth::user(), [

'method' => 'PATCH',

'route' => ['user.preferences.update', Auth::user()->id]

]) !!}

现在,对于没有参数的路由,您可以执行'route' => 'routename',但是由于您有参数,因此可以创建一个数组并按顺序提供参数。

话虽如此,由于您似乎正在更新当前用户的首选项,因此我建议您让处理控制器检查当前登录用户的ID,并以此为基础进行更新-无需发送ID 除非您的用户还需要更新其他用户的偏好设置,否则请在url和路由中输入。 :)

Joel Hinz answered 2020-02-11T02:29:25Z

25 votes

这个线程很旧,但是是第一个出现的线程,所以我认为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');

更改名称即可解决问题。 复制粘贴和疲劳会使您陷入此问题:)。

Bantu answered 2020-02-11T02:29:50Z

8 votes

如果没有定义路由,请检查web.php路由文件。

Route::get('/map', 'NavigationController@map')->name('map'); // note the name() method.

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

{{ __('Map') }}

PS:__('Map')用于将“ Map”翻译成当前语言。

以及您可以使用artisan命令看到的路线名称列表:

php artisan route:list

ALeX inSide answered 2020-02-11T02:30:23Z

3 votes

我有同样的问题,最近找到了解决方案。

您应该检查您的路线是否在route :: group内

像这儿:

Route::group(['prefix' => 'Auth', 'as' => 'Auth.', 'namespace' => 'Auth', 'middleware' => 'Auth']

如果是这样,则应在视图文件中使用它。 像这儿:

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

Ilyas Kuzu answered 2020-02-11T02:30:56Z

3 votes

我的情况有些不同,因为它不是表单,而是返回视图。 添加方法web.php。

web.php看起来像这样:

CATEGORIES

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

Route::view('admin', 'admin.index')->name('admin');

entoniperez answered 2020-02-11T02:31:25Z

3 votes

我正在使用Laravel 5.7并尝试了上述所有答案,但似乎什么都没找到。

对我来说,这是一个相当简单的修复,方法是删除Laravel创建的缓存文件。

似乎我的更改没有得到反映,因此我的应用程序看不到路由。

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

php artisan route:clear

php artisan view:clear

php artisan cache:clear

这里的主要命令是第一个命令,该命令将删除bootstrap/cache/routes.php文件。

第二个命令将删除存储在storage/framework/cache文件夹中的视图的缓存文件。

最后,最后一条命令将清除应用程序缓存。

JustCarty answered 2020-02-11T02:32:12Z

2 votes

就我而言,解决方案很简单:

我已经在route.php文件的开头定义了路由。

将命名的路线移到底部后,我的应用程序终于看到了。这意味着以某种方式定义路线还为时过早。

Peter answered 2020-02-11T02:32:41Z

0 votes

附带说明:

我遇到了类似的问题,很多时候我都收到未找到错误Action方法的错误信息,但很明显,它是在控制器中定义的。

问题不在于控制器,而在于如何设置routes.php文件

假设您将Controller类设置为route.php文件中的资源

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');

star18bit answered 2020-02-11T02:33:24Z

0 votes

请注意该命令

php artisan route:list

或获取更多筛选列表

php artisan route:list | grep your_route|your_controller

第四列告诉您已注册的路由的名称(通常由Route :: resource生成)

Adeel Raza Azeemi answered 2020-02-11T02:33:52Z

0 votes

当您执行命令时

php artisan route:list

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

因此,基本上,如果您使用的是route()方法,这意味着它将仅接受名称列值,并且如果您要使用URI列值,则应使用laravel的url()方法。

DEEPAK answered 2020-02-11T02:34:21Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值