在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出于某种原因实例化了它自己的新类实例。我做错了什么?
谢谢!
答案 0 :(得分:0)
在您的控制台上执行php artisan optimize
,这将为您的应用生成优化的类加载器,然后检查您是否可以在HelperTest
services.php
内找到已在boostrap/cache
中注册的班级HelperTest
。在那里没有注册session_start()
之前,Laravel IoC无法解决您的课程问题。