Mir hat nie wer ausführlich erklärt, wie man z.B. in einem Service auf einen anderen Service zugreift. Nun hab ichs glaub ich endlich kapiert. Das Problem: ich habe einen ViewHelper, der einen Service (calcService) aufruft und in dem Service will ich wieder einen anderen Service benutzen, nämlich den AuthenticationService, um Infos über den eingeloggten User zu bekommen. Das Problem: ich bekam immer folgende Fehlermeldung:
Fatal error: Call to a member function getUser() on a non-object
Das Problem ist, dass man Services und andere Klassen offenbar nicht statisch einbauen sondern injecten oder über den ObjectManager einfügen sollte. In meinem Fall hatte ich das im Service versucht, aber nicht daran gedacht, dass ich schon im ViewHelper den ersten Service falsch ausgerufen hatte.
FALSCH:
use Ophi\OphiSomething\Service\CalcService;
class CalcSomethingViewHelper extends AbstractViewHelper {
public function render($str) {
return CalcService::doSomething($str);
}
}
RICHTIG:
use Ophi\OphiSomething\Service\CalcService;
class CalcSomethingViewHelper extends AbstractViewHelper {
/**
* @var \Ophi\OphiSomething\Service\CalcService
* @inject
*/
private $calcService;
public function render($str) {
return $this->calcService($str);
}
}
…muss man halt auch erstmal wissen.