【问题标题】:Laravel singleton not working across controller/ViewComposerLaravel 单例不能跨控制器/ViewComposer 工作
【发布时间】:2016-12-29 07:35:44
【问题描述】:

在 Laravel 中,我想为服务控制器提供一个类,对控制器操作进行一些更改,然后使用 ViewComposer 进行渲染。

我之前已经做过几次没有问题,但由于某种原因,这次我通常的方法不起作用 - 显然我正在做一些不同的事情,我开始怀疑我从根本上误解了一个方面我正在做。

我有一个使用此 register() 方法的 ServiceProvider:

public function register()
{
    $this->app->singleton(HelperTest::class, function ($app) {
        $pb = new HelperTest();

        $pb->test = "jokes on you batman";

        return $pb;
    });
}

然后在我的控制器中,我正在执行以下操作:

private $helper;

public function __construct(HelperTest $pb)
{
    $this->helper = $pb;
    $this->helper->test = "hahah";
}

然后我有一个 viewcomposer 执行以下操作:

private $helper;

public function __construct(HelperTest $pb)
{
    $this->helper = $pb;
}

public function compose(View $view)
{
    $view->with('output', $this->helper->test);
}

当我在刀片视图中调用{{ $output }} 时,我希望看到hahah,但我却得到jokes on you batman

我的调试表明这三个方法都肯定被调用了。在我看来,ViewComposer 出于某种原因正在实例化它自己的新类实例。我做错了什么?

谢谢!

【问题讨论】:

  • 我做了更多调试,似乎 compose() 在控制器操作之前被调用。为什么会这样???

标签: php laravel dependency-injection ioc-container php-5.6


【解决方案1】:

在您的控制台上执行php artisan optimize,这将为您的应用程序生成一个优化的类加载器,然后检查您是否可以在services.php 中找到您在services.php 中注册的类HelperTest boostrap/cache。在HelperTest 没有在那里注册之前,Laravel IoC 无法解析你的类。

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多