【发布时间】: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