Ich habe eine Serviceklasse MyService
, die ich auf den Controllern verwende, indem ich sie als Parameter im Controller-Konstruktor übergebe. Unnötig zu sagen, verwende ich eine Fabrik, um die Controller zu instanziieren, und benutze den Service Locator der Fabrik, um MyService
abzurufen und dann an den instanziierten Controller zu übergeben.ZF2 - Wie man einen Service in eine Ansicht injiziert?
// factory
$sl = $sl->getServiceLocator();
$ms = $sl->get(MyService::class);
return new MyController($sm);
Jetzt brauche ich diesen Service in der Ansicht. Ich habe versucht, einen View Helfer schaffen, die MyService
als Abhängigkeit dauern würde, (ähnlich dem Controller) wie folgt aus:
// view helper factory
$ms = $sl->get(MyService::class);
return new MyServiceViewHelper($ms);
Allerdings wird es nicht richtig MyService
instanziiert. Stürzt sagen:
Catchable fatal error: Argument 1 passed to MyService::__construct() must be an instance of MyRepository, none given, called in /my-path/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php
MyService
dauert ca. 3 Repositories als Abhängigkeiten, die natürlicherweise von der MyServiceFactory
vorgesehen sind. Aus irgendeinem Grund ruft der Ansichtshelfer die Factory oder etwas ähnliches nicht richtig auf, was zu einer inkorrekten Instanziierung führt.
Also mein nächster Gedanke ist: vielleicht ist dies nicht, wie Sie Dienste in die Ansicht injizieren. So jetzt frage ich:
Wie injiziere ich Dienstleistungen zu den Ansichten selbst?
Edit: Bitte sagen Sie nicht "Pass es vom Controller".