为啥我的用户数据没有使用资源控制器中的 show 方法传递到页面视图?
Posted
技术标签:
【中文标题】为啥我的用户数据没有使用资源控制器中的 show 方法传递到页面视图?【英文标题】:Why isn't my user data passing to page view using show method in resource controller?为什么我的用户数据没有使用资源控制器中的 show 方法传递到页面视图? 【发布时间】:2021-06-03 15:07:24 【问题描述】:我想返回包含全名和用户名的个人资料,但是当我尝试传递数据时,这些字段会在视图加载时消失。
在我的个人资料控制器中,我尝试了以下操作:
public function show(User $user)
return view('profile')->with(['user' => $user]);
我也试过了:
public function show(User $user)
return view('profile', compact('user));
也试过了:
public function show(User $user)
return view('profile', ['user' => $user]);
是的,我已经有了use App\Http\Controllers\ProfilesController;
,因为我用这个命令php artisan make:controller ProfilesController --resource --model=Photo
制作了控制器
我在web.php中的资源路由是:
Route::resource('/profile', ProfilesController::class)->names([
'show' => 'profile.show'
])
视图加载正常,只是没有传入数据。
<div class="profile_full_name_div">
<p class="profile_full_name"> $user->name </p>
</div>
<div class="profile_username_div">
<p class="profile_username"> $user->username </p>
</div>
每当我输入一个核心名称时,用户名和全名信息都会重新出现在视图中。 例如:
<div class="profile_full_name_div">
<p class="profile_full_name">Susan Bowe</p>
</div>
<div class="profile_username_div">
<p class="profile_username">susan_bowe</p>
</div>
【问题讨论】:
你的路由参数被命名为'profile'而不是'user'......如果你想要隐式路由模型绑定发生,你需要将路由参数名称与类型参数的相同名称匹配暗示你的方法laravel.com/docs/8.x/routing#implicit-binding 非常感谢您的帮助。成功了! 【参考方案1】:将模型 ID 注入到路由或控制器操作时,您通常会查询数据库以检索与该 ID 对应的模型。 Laravel 路由模型绑定提供了一种方便的方法来自动将模型实例直接注入到您的路由中。例如,您可以注入与给定 ID 匹配的整个 User
模型实例,而不是注入用户的 ID。
Laravel 自动解析定义在路由或控制器操作中的 Eloquent 模型,其类型提示的变量名称与路由段名称匹配。例如:
use App\Models\User;
Route::get('/users/user', function (User $user)
return $user->email;
);
由于 $user
变量被类型提示为 App\Models\User
Eloquent 模型,并且变量名称与 user
URI 段匹配,Laravel 将自动注入 ID 与请求中相应值匹配的模型实例URI。如果在数据库中没有找到匹配的模型实例,则会自动生成 404 HTTP 响应。
但是,如果您声明没有此参数的路由,Laravel 将无法解析正确的用户,因此不会向您的视图发送数据。因为模型是空的。
您可以通过在控制器中执行 dd()
来检查这一点。
【讨论】:
非常感谢您的帮助。将名称从配置文件更改为用户成功!以上是关于为啥我的用户数据没有使用资源控制器中的 show 方法传递到页面视图?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 UIPageViewController 中的页面没有改变?