在 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.php
内boostrap/cache
.直到 HelperTest
未在那里注册,Laravel IoC 无法解析您的类。
关于php - Laravel 单例无法跨 Controller /ViewComposer 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39084811/