Zum Inhalt springen

Call to a member function on a non-object

Erstellt am 27. April 2014 · 3 Antworten · letzte Antwort am 4. Mai 2014

Tags: Frage

NinaP ·

Hallo,

seit dem Update auf Typo3 6.2 habe ich eine Fehlermeldung in meiner Extbase Extension zu der ich keine Lösung finden kann. Es wäre schön wenn jemand einen Tipp für mich hätte wo der Fehler liegen könnte.

Er hängt sich an der Zeile
$properties = $this->castleRepository->getProperties();
in der CastleListController.php
Versuche ich ein print_r($this->castleRepository);exit; bekomme ich keine Fehlermeldung. Die Fehlermeldung bleibt aber bestehen wenn ich den Inhalt der Funktion getProperties() auskommentiere und nur ein Return setze. Es scheint als ob er die Funktion getProperties() nicht finden könnte. Nur weiß ich nicht warum dies so ist.

Liebe Grüße
Nina

[27-Apr-2014 11:31:18 Europe/Berlin] PHP Fatal error: Call to a member function getProperties() on a non-object in /html/typo3/typo3conf/ext/np_castle_listing/Classes/Controller/CastleListController.php on line 35

CastleListController.php

class Tx_NpCastleListing_Controller_CastleListController extends Tx_Extbase_MVC_Controller_ActionController {

	/**
	 * @var Tx_NpCastleListing_Domain_Repository_CastleRepository
	 */
	protected $castleRepository;

    
    /**
     * injectCastleRepository
     *
 	* @param Tx_NpCastleListing_Domain_Repository_CastleRepository $castleRepository
 	* @return void
	 */
	 public function injectCastleRepository(Tx_NpCastleListing_Domain_Repository_CastleRepository $castleRepository) {
		 $this->castleRepository = $castleRepository;
	 }
public function listAdressesAction() {
		#$this->view->assign('castles', $this->castleRepository->findAll());
		if($this->request->hasArgument('postcodeArea')){
			$postcodeArea = $this->request->getArgument('postcodeArea');
		}
		else{
			$postcodeArea = 3;
		}
		$properties = $this->castleRepository->getProperties();
		$this->view->assign('properties', $properties);
.....

CastleRepository.php

class Tx_NpCastleListing_Domain_Repository_CastleRepository extends Tx_Extbase_Persistence_Repository {

	protected $defaultOrderings = array ('name' => Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING);
public function getProperties(){
		$query = $this->createQuery();
		$query->getQuerySettings()->setReturnRawQueryResult(TRUE);
		$query->statement("SELECT uid,name,title,image FROM tx_npcastleoverview_properties");
		
		$result = $query->execute();
		return $result;
	}
}
aemka ·

Man macht schon seit einigen TYPO3 Versionen die Dependency Injection nicht mehr über eine inject Methode, sondern schreibt einfach nur @inject an die Membervariable des Repositories, das injectet werden soll. Dann mal Cache leeren und ich vermute es geht wieder.

aemka ·

Und warum baut du dir die Methode getProperties() überhaupt? ein findAll() würde doch schon reichen und das existiert doch bereits implizit.

NinaP ·

ohha Danke. Das ist schon eine ziemlich alte und vor allem meine erste Extbase Extension 😛