如何将数据从视图传递到父布局?

How to pass data from view to parent layout?

抱歉,我需要粘贴这么多代码,但我认为这是理解我的结构所必需的。

我有一个用户资源Route::resource('/clients', ClientController::class)->middleware(['auth']);

对于路线 users.show 我在 UsersController:

中有这个功能
public function show(Client $client)
{
    return view('clients.show', [
        'client' => $client,
    ]);
}

然后我用

简化了我的 clients.show 视图
<x-client-layout>

    Bla Bla ...

</x-client-layout>

我的 layouts.client

@include('core.header')


    @include('layouts.navigation-client')

    <main class="flex flex-col w-full min-h-screen">

        {{ $slot }}
        
    </main>

@include('core.footer')

现在,对于 layouts.navigation-client,我想创建一个 link 到路线 Route('users.show', $client->id)。但是如何将 $client 传递给导航视图?

<x-nav-link :href="Route('users.show', $user->id)" :active="request()->routeIs('users.show')" icon="user">

可行但感觉不好的方法是:

Route('users.show', explode("clients/", url()->current())[1])

在您的 users.show 视图中,您可以将客户端 ID 传递给 <x-client-layout>

<!-- users.show view-->
<x-client-layout :client="$client">
    <!-- component markup -->
</x-client-layout>

只需确保在 <x-client-layout /> 组件中为 $client 定义一个默认值,比如使用 $client->id = 0 的客户端,否则您可能会得到未定义的错误。

您也可以仅在 $client->id 的值不是 0 时有条件地显示 link - 这样您就可以将默认值设置为 0 并使用<x-client-layout /> 对于不需要 $client->id 并且不需要显示 link.

的其他视图

然后您可以将 $client 传递给 layouts.navigation-client,然后将其用于 <x-nav-link />

@props([
   'client'
])
@include('core.header')


    @include('layouts.navigation-client', ['client' => $client])

    <main class="flex flex-col w-full min-h-screen">

        {{ $slot }}
        
    </main>

@include('core.footer')

然后在layouts.navigation-client

<x-nav-link :href="route('users.show', $client->id)" :active="request()->routeIs('users.show')" icon="user" />