为什么我的用户数据不使用资源控制器中的 show 方法传递到页面视图?

Why isn't my user data passing to page view using show method in resource controller?

我想 return 一个包含全名和用户名的配置文件,但是当我尝试传递数据时,这些字段会在视图加载时消失。

在我的配置文件控制器中,我尝试了以下操作:

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>

将模型 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 将自动注入具有与请求 URI 中相应值匹配的 ID 的模型实例。如果在数据库中没有找到匹配的模型实例,将自动生成 404 HTTP 响应。

但是,如果您在没有此参数的情况下声明路由,Laravel 将无法解析正确的用户,因此不会向您的视图发送任何数据。因为模型是空的。

您可以通过在控制器中执行 dd() 来检查这一点。