【问题标题】:View Composer not working in my Laravel AppView Composer 在我的 Laravel 应用程序中不起作用
【发布时间】: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 先生,我想将多个变量传递给多个变量你有什么解决方案
  • 检查中间件的使用肯定对你有帮助

标签: php laravel laravel-5 laravel-5.6


【解决方案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() 但它不起作用,所以可能是在仪表板视图上没有调用作曲家
猜你喜欢
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 2022-12-16
  • 2018-12-23
  • 1970-01-01
相关资源
最近更新 更多