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
文件已被解析,因此调用了视图编辑器。
我目前正在使用 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
文件已被解析,因此调用了视图编辑器。