【问题标题】:Framework PHP Route - Error 404 Not found框架 PHP 路由 - 找不到错误 404
【发布时间】:2020-12-11 23:05:04
【问题描述】:

在 Laravel 中,我需要编辑由 Auth/RegisterController 创建的用户,但使用我创建的控制器,例如 ProfileController。但是当我尝试通过 a:href 按钮访问时,显示 404 错误。

代码:

web.php

Route::group(['middleware' => ['auth']], function(){
    Route::resource('profile', 'ProfileController')->except(['edit']);
    Route::get('profile/{profile}/edit', ['as' => 'profile.edit', 'uses' => 'ProfileController@edit']);
});

Auth::routes();

app.blade.php

<a href="{{route('profile.edit',['profile'=>auth()->user()->id])}}" class="btn btn-primary">
                        {{auth()->user()->email}}
</a>

配置文件控制器

public function edit($profile)
{
   $user = \App\User::findOrFail($profile);
   return view('profile.edit', compact('user'));
}

列出路线

|        | POST      | profile                | profile.store    | App\Http\Controllers\ProfileController@store                           | web,auth,guest                  |      
|        | GET|HEAD  | profile                | profile.index    | App\Http\Controllers\ProfileController@index                           | web,auth,guest                  |      
|        | GET|HEAD  | profile/create         | profile.create   | App\Http\Controllers\ProfileController@create                          | web,auth,guest                  |      
|        | DELETE    | profile/{profile}      | profile.destroy  | App\Http\Controllers\ProfileController@destroy                         | web,auth,guest                  |      
|        | PUT|PATCH | profile/{profile}      | profile.update   | App\Http\Controllers\ProfileController@update                          | web,auth,guest                  |      
|        | GET|HEAD  | profile/{profile}      | profile.show     | App\Http\Controllers\ProfileController@show                            | web,auth,guest                  |      
|        | GET|HEAD  | profile/{profile}/edit | profile.edit     | App\Http\Controllers\ProfileController@edit                            | web,auth,guest                  |  

有人可以帮助我吗?

Tks,

阿吉亚尔,阿德森 M.

【问题讨论】:

  • 欢迎来到 SO ...您知道资源会为您注册相同的 edit 路由吗?你也在使用App\User 进行身份验证吗?
  • 奇怪的是你的路由同时应用了 auth 和 guest 中间件...你确定你已经登录并且有一个 auth()->user() 吗?

标签: php laravel routes controller http-status-code-404


【解决方案1】:

欢迎来到 SO!

就像提到的@lagbox,你可以保留

Route::resource('profile', 'ProfileController');

没有-&gt;except() 自动为您生成完全相同的编辑路线。

此外,您可以将控制器操作简化为:

public function edit(User $profile)
{
   return view('profile.edit', compact('profile'));
}

这使用类型提示自动让依赖注入为您解析用户实例,由 {profile} 参数传入的键标识。

然后你必须在你的 profile/edit.blade.php 中使用$profile,除非你想做像return view('profile.edit', ['user' =&gt; $profile]); 这样的事情。

将参数命名为模型可能是个好主意。资源路由通常完全基于模型的名称,因此配置文件不是用户路由的好选择。你可以使用Route::resource('user', 'ProfileController')(或者甚至是UserController),或者如果你想坚持使用配置文件,但想要$user作为参数,你必须像Route::get('profile/{user}/edit', 'ProfileController')一样自己创建所有路由。

另外,写入route('profile.edit',['profile'=&gt;auth()-&gt;user()]) 也可以,并且具有在用户未通过身份验证时不会中断的优点。

话虽如此,您的代码应该仍然可以工作。尝试在以下行中使用find() 而不是findOrFail()dd($user);,以确保您的路线正常工作。如果你看到转储,它可能是 null,这意味着传递的 id 无效,这真的很奇怪。

如果您可以发布锚标记的完整生成链接和dd 的结果,我将很乐意提供帮助。

【讨论】:

  • 好的。第一次,我尝试使用 UserController 和简单的 Route::resource,但没有用。我按照你说的做了,结果是一样的。我在编辑调用中将 dd 添加到 UserController 中,但没有显示任何内容。
  • 如果你用我提到的 first 和 dd 替换了 firestOrFail ,你仍然得到一个 404,你的链接可能不正确。您能否在您的 app.blade.php 中添加 @dd(route('profile.edit', ['profile'=>auth()->user()->id])) 并在此处发布输出?
  • 我不知道为什么,但是通过执行命令“php artisan make:controller UserController --resource”解决了这个问题,并通过了新控制器中的代码。谢谢大家。
  • 好的,很高兴听到。这就是为什么你应该总是发布完整的代码,而不仅仅是一小部分。 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2015-02-04
  • 2019-06-10
  • 2023-03-29
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多