2013-01-31 3 views
0

J'ai créé un module de base de tri dans ma bibliothèque de fournisseurs ZF2. Jusqu'à présent, tout fonctionne comme je le veux. J'ai un problème. Bien que je puisse étendre les contrôleurs du module de base, je ne peux pas accéder au service de base. J'utilise Doctrine 2 comme couche de base de données.Appel à une fonction membre get()

Après l'implémentation du ServiceLocator, j'obtiens une erreur fatale: appel à une fonction membre get() sur un non-objet dans mon fichier de service de base. Mon fichier BaseService est montré comme ci-dessous:

namespace MyResource\Service; 

use Doctrine\ORM\Mapping as ORM; 
use Zend\ServiceManager\ServiceManager; 
use Zend\ServiceManager\ServiceManagerAwareInterface; 
use Zend\ServiceManager\ServiceLocatorInterface; 

class BaseService implements ServiceLocatorAwareInterface 
{ 
    /** 
    * Entity manager instance 
    * 
    * @var Doctrine\ORM\EntityManager 
    */ 
    protected $_em; 

    protected $_serviceLocator; 

    public function __construct() 
    { 
     $this->getEntityManager(); 
    } 

    /** 
    * Returns an instance of the Doctrine entity manager loaded from the service 
    * locator 
    * 
    * @return Doctrine\ORM\EntityManager 
    */ 
    public function getEntityManager() 
    { 
     if (null === $this->_em) { 
      $this->_em = $this->getServiceLocator() 
       ->get('doctrine.entitymanager.orm_default'); 
     } 
     return $this->_em; 
    } 

    /** 
    * Set serviceManager instance 
    * 
    * @param ServiceLocatorInterface $serviceLocator 
    * @return void 
    */ 
    public function setServiceLocator(ServiceLocatorInterface $serviceLocator) 
    { 
     $this->serviceLocator = $serviceLocator; 
    } 

    /** 
    * Retrieve serviceManager instance 
    * 
    * @return ServiceLocatorInterface 
    */ 
    public function getServiceLocator() 
    { 
     return $this->serviceLocator; 
    } 

} 

Quelqu'un peut-il aider?

Merci

+0

Appellez-vous/créez-vous votre service depuis le ServiceManager avant de l'utiliser? – yechabbi

Répondre

0

1):

Votre propriété est appelée

protected $_serviceLocator; 

mais vous assignez vos valeurs

protected $serviceLocator; 

2)

Créez-vous votre Service via DI ou le gestionnaire de service? Si vous le faites, le ServiceLocator devrait être automatiquement injecté pour vous, si vous le créez manuellement en utilisant le mot-clé "new", le ServiceLocatior ne sera pas attaché.

0

There seems to be a glitch in ZF2 .If you try setting the properties as below the problem will be fixed. Try like this

foreach ($resultSet as $row) { 

     $entity = new Countrypages(); 
      $entity->setId($row->id); 
     $entity->setName($row->name); 
     $entity->setSnippet($row->snippet); 
     $entity->setSortorder($row->sortorder); 
     $entity->setActive($row->active); 
     $entity->setCreated($row->created); 
     $entity->setModified($row->modified); 
     $entity->setFirstname($row->firstname); 
     $entity->setCreatedby($row->createdby); 
     $entities[] = $entity; 
    } 

ignore this

foreach ($resultSet as $row) { 

        $entity = new Countrypages(); 
        $entity->setId($row->id); 
        ->setName($row->name); 
        ->setSnippet($row->snippet); 
        ->setSortorder($row->sortorder); 
        ->setActive($row->active); 
        ->setCreated($row->created); 
        ->setModified($row->modified); 
        ->setFirstname($row->firstname); 
        ->setCreatedby($row->createdby); 
        $entities[] = $entity; 
       } 

I hope this help you save your time.

-1

Vous utilisez use use Zend\ServiceManager\ServiceManagerAwareInterface mais vous implémentez ServiceLocatorAwareInterface (et il n'y a pas de déclaration "utilisation" pour celui-là).

Questions connexes