2017-08-22 4 views
0

Je veux obtenir les objets d'un référentiel, mais je prochaine erreurErreur fatale: appel à une fonction de membre findAll() sur null dans TYPO3

Call to a member function findAll() on null

La ligne d'erreur est $projects = $this->projectRepository->findAll();

D'abord utilisé le gestionnaire d'objets pour obtenir le référentiel, cela n'a pas fonctionné. La configuration actuelle est: Dans contrôleur

/** 
*projectRepository 
* 
* @var \VENDOR\MyExtName\Domain\Repository\ProjectRepository 
* @inject 
*/ 
protected $projectRepository = null; 

et dépôt

class ProjectRepository extends \TYPO3\CMS\Extbase\Persistence\Repository 
{ 
    public function createQuery() { 
    $query = parent::createQuery(); 
    $query->getQuerySettings()->setRespectStoragePage(FALSE); 
    return $query; 
    } 
} 

Cela se produit également avec findByUid($uid)

Les objets existent dans DB et visible dans Bé.

J'ai nettoyé les caches, supprimé le contenu du répertoire typo3temp et suivi les questions sur une erreur similaire (que je pensais) Call to a member function findAll() on a non-object, mais cela n'a pas fonctionné et l'exception que j'ai est différent.

Je vous remercie de votre aide, s'il vous plaît me guider pour corriger cette erreur

+1

Bien que suggère '$ this-> projectRepository' est pas ce que vous pensez qu'il est. Déchargez-le et jetez un coup d'oeil. Supposons que vos journaux montrent une autre erreur que vous devez regarder. Comme votre autochargeur est en panne ou vous avez une faute de frappe dans les métadonnées sur ces commentaires de style c. – ficuscr

+0

Ou essayez simplement de créer une instance de votre dépôt comme ceci dans votre action d'index: '$ test = new \ VENDEUR \ MyExtName \ Domain \ Repository \ ProjectRepository();' et si cela échoue, vous aurez plus d'informations sur ce qui ne va pas. – Wolfgang

+0

J'ai utilisé 'var_dump' pour l'attribut print avant d'utiliser l'instruction' findAll() ', et j'ai vu l'instance correcte de mon dépôt –

Répondre

1

Cette erreur est presque toujours causée par l'annotation « compilation » de extbase et lié au cache. Vous avez dit que vous avez effacé les caches et supprimé le contenu de typo3temp, mais les méthodes d'effacement du cache sont très différentes et ne fonctionnent pas pour chaque cache. Par exemple, le cache d'annotation est uniquement effacé à l'aide du bouton Effacer le cache de l'outil d'installation. Les icônes de la barre d'outils au-dessus du backend TYPO3 n'effacent pas ce type de cache.

Les caches d'annotations ne seront pas stockés dans le dossier typo3temp afaik, mais auront leur propre section dans la base de données. L'effacement du cache ne doit JAMAIS être effectué en supprimant le contenu du dossier typo3temp à la main, mais TOUJOURS via l'outil d'installation ou les boutons ou commandes appropriés dans le backend TYPO3 ou l'interface CLI.

Enfin, il existe un cache de chargement automatique des classes PHP, qui n'est pas non plus effacé par l'outil d'installation. Donc, si vous ajoutez une nouvelle classe PHP à votre extension en développement, vous devez désinstaller et réinstaller votre extension via l'extensionmanager. Si vous utilisez composer pour installer votre instance TYPO3, c'est encore un peu différent. Si tel est le cas, vous pouvez effacer le cache de chargement automatique en tapant la commande composer dump-autoload pour effacer le cache de chargement de classe de composer, car TYPO3 l'utilise en mode composer.

Je suppose que vous n'avez simplement pas essayé le bouton Installer l'outil pour effacer le cache.

+0

Merci, cela fonctionne avec le bouton clear chaches de Install Tool, mais m'a montré une autre erreur de type' Oops 'erreurs, qui dit' PHP Warning: class_parents(): objet ou chaîne attendue dans .... '. J'ai supprimé le contenu de typo3temp et effacer les caches depuis la barre d'outils sur BE de TYPO3 et fonctionne tout maintenant. –

+0

Maintenant, j'utilise un autre dépôt de l'autre entité et dans le 'findAll()' se produit à nouveau, j'ai cliqué seulement sur les caches propres depuis l'outil d'installation et fonctionne correctement. –

0

Et cette erreur se produit si vous oubliez d'injecter votre dépôt dans votre contrôleur:

/** 
*projectRepository 
* 
* @var \VENDOR\MyExtName\Domain\Repository\ProjectRepository 
* @inject 
*/ 
protected $projectRepository = null;