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 不工作;

php Laravel View Composer

使用 composer 将非 laravel 包添加到我的 Laravel 项目中

Laravel View Composer 为每个视图复制 SQL 查询

Laravel View Composer“使用未定义的常量”