View Composer 在我的 Laravel 应用程序中不起作用
Posted
技术标签:
【中文标题】View Composer 在我的 Laravel 应用程序中不起作用【英文标题】:View Composer not working in my Laravel App 【发布时间】:2019-04-29 20:59:51 【问题描述】:我正在尝试在多个视图上共享变量,所以我尝试了视图编辑器,但它无法正常工作,因为它没有传递变量,有什么方法可以调试它
ComposerServiceProvider.php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
view()->composer(
'layouts.admin.dashboard',
'App\Http\ViewComposers\StatComposer'
);
/**
* Register services.
*
* @return void
*/
public function register()
//
所以现在这里是 Composer 文件
StatComposer.php
<?php
namespace App\Http\ViewComposers;
use Analytics;
use Spatie\Analytics\Period;
use App\Libraries\GoogleAnalytics;
use Illuminate\Http\Request;
use Illuminate\View\View;
class StatComposer
/**
* Create a movie composer.
*
* @return void
*/
public function __construct()
$result = GoogleAnalytics::topCountries();
$country = $result->pluck('country');
$country_sessions = $result->pluck('sessions');
$topBrowsers = GoogleAnalytics::topBrowsers();
$browser = $topBrowsers->pluck('browser');
$browser_sessions = $topBrowsers->pluck('sessions');
$totalPageViews = GoogleAnalytics::fetchVisitorsAndPageViews();
$date = $totalPageViews->pluck('date');
$visitors = $totalPageViews->pluck('visitors');
$pageViews = $totalPageViews->pluck('pageViews');
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
$view->with('country', 'country_sessions', 'browser', 'browser_sessions','date','visitors','pageViews');
所以我无法找到调试它的方法,因为变量没有传递给我试图将它们传递给的视图,并且视图给出了未定义变量的错误。
【问题讨论】:
你可以在中间件的帮助下做同样的事情更多关于laravel.com/docs/5.8/middleware @GauravGupta 先生,我想将多个变量传递给多个变量你有什么解决方案 检查中间件的使用肯定对你有帮助 【参考方案1】:问题是您声明了很多变量而没有在 compose 函数中提供值。此外,您实际上并没有将数据保存在任何地方。应该是这样的。
protected $country;
/**
* Create a movie composer.
*
* @return void
*/
public function __construct()
$result = GoogleAnalytics::topCountries();
$this->country = $result->pluck('country');
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
$view->with('country', $this->country);
请注意,我们在顶部声明了 classes 属性,然后保存到该属性,然后使用 $this->country 属性在 with 方法中设置 'country' 变量。
【讨论】:
对不起先生,它现在正在工作它仍然在我称为变量的新视图中显示未定义的变量。 是在 layouts.admin.dashboard 视图中吗?您是否执行过 dd() 以确保调用 composer 并且 $result 正在传递数据? 你也传递给单个变量或值吗? 是的,我正在传递单个变量,我尝试了 dd() 但它不起作用,所以可能是在仪表板视图上没有调用作曲家以上是关于View Composer 在我的 Laravel 应用程序中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在扩展布局的视图中无法访问Laravel View Composer变量
带有存储库的 Laravel View Composer 不工作;
使用 composer 将非 laravel 包添加到我的 Laravel 项目中