php - Laravel 单例无法跨 Controller /ViewComposer 工作

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

在 Laravel 中,我有一个类可用于服务 Controller ,在 Controller 操作中进行一些更改,然后使用 ViewComposer 进行渲染。

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

我有一个带有这个 register() 方法的 ServiceProvider:

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

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

        return $pb;
    });
}

然后在我的 Controller 中,我正在执行以下操作:
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 }}在 Blade View 中,我希望看到 hahah ,但我得到 jokes on you batman .

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

谢谢!

最佳答案

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

关于php - Laravel 单例无法跨 Controller /ViewComposer 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084811/

相关文章:

php - MySQL 从多个表中获取结果

php - 为什么 Laravel 调用 execute() 会返回重复的结果?

php - Laravel Homestead 安装 : bash init. sh 不工作

php - laravel Pusher - 在生产中发送事件不起作用

php - 在 null 上调用成员函数 connection()

php - CodeIgniter更新记录

php - 使用另一个表中的值将动态复选框写入表

javascript - 为什么angular的DI内联注解中的函数是数组元素?

java - 在支持组件中使用 @ManagedProperty

java - 我应该使用 Java EE 6 中的哪种依赖注入(inject)机制?