Typo3 extbase: Services einbinden

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.