Typo3 extbase: Services einbinden


December 11, 2015 at 10:33
Typo3

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.


Tags: dependency injection extbase inject service


Hinterlasse einen Kommentar: