Laravel - 在所有路由上请求提供者数据

Laravel - Provider data being requested on all routes

我目前正在使用 Laravel Provider 在每次调用时将数据传递给视图。如果用户通过身份验证,App.blade.php 包含 blade 文件。

我的问题是,目前,无论用户在哪个视图上,它仍然会调用 ViewServiceProvider.php,这似乎不是很有效。

我曾尝试使用 @if(view()->exists('home')),但这似乎没有任何效果,因此,仍然从 ViewServiceProvider.php.[=18= 调用查询]

App.blade.php:

@if(!Auth::guest())

  @if(view()->exists('home'))

    @include('layouts.check')

  @endif

@endif

ViewServiceProvider.php:

public function boot()
    {
      view()->composer('layouts.check', function ($view) {

        $sites = Site::where('trust_id', Auth::id())->get();

        $view->with(['sites' => $sites]);
      });
    }

如有任何帮助,我们将不胜感激。

您的代码存在问题,它会检查视图是否存在。很有可能,视图 "home" 将始终存在,因此它将始终包含您的视图; "layouts.check"。

当然,除非视图 "home" 是动态的并且只是有条件地存在,这似乎不对。如果您希望 "layouts.check" 视图文件仅在某些页面上加载,您可能想尝试 "Request::is()".

@if(Request::is('home'))
    @include('layouts.check')
@endif

只要呈现 'layouts.check' 视图,就会调用视图编辑器。

即使您尝试不渲染它(通过在您的 if 语句中添加),该视图仍将被渲染,您的视图编辑器仍将被调用。

模板引擎将一次性解析您的视图。引擎不关心您所看到的任何类型的逻辑,它唯一的工作就是将该逻辑转换为 PHP 代码。因此,即使您有语句 @if(!Auth::guest()),解析器也不理解实际逻辑,它只知道将其转换为 <?php if (!Auth::guest()) { </php>.

基本上,您的 @if 语句不会阻止引擎解析您的包含文件,而是已解析的 PHP 代码会阻止包含文件的结果显示在您的输出中。因此,由于您的 @include 文件已被解析,因此调用了视图编辑器。