Zum Inhalt springen

Call to a member function add() on a non-object

Erstellt am 29. Mai 2013 · 3 Antworten · letzte Antwort am 3. Juni 2013

Tags: Frage

denyo256 ·

Hallo zusammen,

ich bin gerade etwas ratlos, da mir meine createAction einen Internal Server Error produziert mit der folgenden PHP-Fehlermeldung:

Call to a member function add() on a non-object in ...

Da ich die Standard-Aktionen, die mir der Extension Builder erstellt, nicht verändert habe, sondern nur die Formulare ein wenig modifiziert habe, weiß ich leider nicht mehr weiter. Vielleicht habt ihr aber auch schonmal ein solches Problem gehabt.

Hier noch meine createAction:

/**
 * action create
 *
 * @param Tx_MyExt_Domain_Model_Role $newRole
 * @return void
 */
public function createAction(Tx_MyExt_Domain_Model_Role $newRole) {
	$this->roleRepository->add($newRole);
	$this->flashMessageContainer->add('Your new Role was created.');
	$this->redirect('overview');
}

Viele Grüße
Daniel

WebTekk ·

Grüezi

Fehlt Deiner Controller Klasse das Repository?

Siehe EXT:blog_example

/**
 * @var Tx_BlogExample_Domain_Repository_BlogRepository
 * @inject
 */
protected $blogRepository;

Grüsse, Heinz

harald1972 ·

Hallo,

bin mir nicht sicher, ob die Antwort mit dem BlogRepository (obwohl richtig) auch hilfreich war. 😉

Konkret wird versucht die Methode add() aufzurufen auf einem Objekt, das keines ist.
Das soll in deiner createAction zweimal geschehen.

$this->roleRepository->add($newRole);
$this->flashMessageContainer->add('Your new Role was created.');

Am flashMessageContainer wird's vermutlich nicht liegen. Was uns wieder zurück zum Repository bringt.
Als erstes würd ich , wie WebTekk schon sagt, ebenfalls tippen, daß deiner Controller-Klasse das roleRepository fehlt. Die entsprechende Repository-Klasse muss selbverständlich in Domain/Repository/RoleRepository.php sein.

Gruß Harald

denyo256 ·

Ja, so schlecht waren die Tipps mit dem Repository nicht. Es war zwar da, aber die Variable war nicht gesetzt, also keine inject-Funktion. Und seinen Ursprung hatte das Dilemma im vergessenen Haken beim Aggregate Root im Extension Builder 🙂

Vielen Dank auf jeden Fall für eure Hilfe!