In Laravel habe ich eine Klasse, die ich dem Service Controller zur Verfügung stellen möchte, einige Änderungen in der Controller-Aktion vornehmen und dann mit einem ViewComposer rendern.Laravel Singleton funktioniert nicht über Controller/ViewComposer
Ich habe dies schon mehrmals ohne Problem gemacht, aber aus irgendeinem Grund funktioniert mein üblicher Ansatz diesmal nicht - klar mache ich etwas anderes, und ich beginne zu vermuten, dass ich einen Aspekt von falsch verstanden habe was mache ich.
Ich habe einen Serviceprovider mit diesem Register() Methode:
public function register()
{
$this->app->singleton(HelperTest::class, function ($app) {
$pb = new HelperTest();
$pb->test = "jokes on you batman";
return $pb;
});
}
Da ist in meinem Controller Ich mache folgendes:
private $helper;
public function __construct(HelperTest $pb)
{
$this->helper = $pb;
$this->helper->test = "hahah";
}
Und dann habe ich eine viewcomposer wie folgt vorgehen:
private $helper;
public function __construct(HelperTest $pb)
{
$this->helper = $pb;
}
public function compose(View $view)
{
$view->with('output', $this->helper->test);
}
Als ich {{ $output }}
in der Klinge Ansicht aufrufen, erwarte ichzu sehen, aber stattdessen bekomme ich jokes on you batman
.
Mein Debugging hat gezeigt, dass alle drei dieser Methoden definitiv aufgerufen werden. Es sieht für mich so aus, als ob der ViewComposer aus irgendeinem Grund seine eigene, neue Instanz der Klasse instanziiert. Was mache ich falsch?
Danke!
Ich habe ein bisschen mehr Debugging getan und es scheint, dass compose() VOR der Controller-Aktion aufgerufen wird. Warum sollte das sein ??? – Raiden616