我可以设置视图数据而不返回 Laravel 8 中的视图吗?

Can I set view data without returning the view in Laravel 8?

我在文件夹 components 中有一个名为 structure 的模板,其中包含 header 和页脚元素。我所有的观点都是 child 这个。因此,在 header 中,我想检查用户是否已登录以显示对话框。

所以,我在 parent 视图中得到了这段代码:

<div class="loginDialogue">
                            {{-- {{$logged = false}} --}}
                            @if ($logged == true)
                            <a href="/profile" class="navbarBtn">Ver perfil de {{$userId}}</a>
                            <a href="/carrito" class="navbarBtn">Ver carrito</a>

                            @else
                            <a href="/login" class="navbarBtn">Iniciar sesión</a>
                            <a href="/registrer" class="navbarBtn">Registrarse</a>
                            @endif
                        </div>

这是控制器代码:

Route::get('/', function () {
    if (Auth::check()) {
        $logged = true;
        $userId = Auth::user()->id;

        view('components.structure')
            ->with('userId', $userId)
            ->with('logged', $logged);
        return view('index');
    } else {
        $logged = false;
        $userId = "";
        view('components.structure')
            ->with('logged', $logged)
            ->with('userId', $userId);
        return view('index');
    }
});

我的问题是 $logged 显示为 undefined,我正在寻找有关将数据传递给视图而不返回它的信息,但我找到了任何信息。

实际上,您不需要向视图发送身份验证数据

<div class="loginDialogue">
      
      @if (Auth::check())
            <a href="/profile" class="navbarBtn">Ver perfil de {{Auth::id()}}</a>
            <a href="/carrito" class="navbarBtn">Ver carrito</a>

      @else
         <a href="/login" class="navbarBtn">Iniciar sesión</a>
         <a href="/registrer" class="navbarBtn">Registrarse</a>
      @endif
 </div>

Route::get('/', function () {
    
        return view('index');
    }
});

如果它只是关于身份验证信息,那么您不必通过控制器传递它。

<div class="loginDialogue">
    @if (auth()->check())
        <a href="/profile" class="navbarBtn">Ver perfil de {{auth()->id()}}</a>
        <a href="/carrito" class="navbarBtn">Ver carrito</a>
    @else
        <a href="/login" class="navbarBtn">Iniciar sesión</a>
        <a href="/registrer" class="navbarBtn">Registrarse</a>
    @endif
</div>