IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

[ZF2] Accéder à la DB depuis un PluginCOntroller


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 23
    Par défaut [ZF2] Accéder à la DB depuis un PluginCOntroller
    Bonjour,
    Je suis en train de développer un Plugin de Provider Oauth.
    J'ai donc besoin d'accééder à la DB depuis mon Plugin.
    J'ai donc créé les factories dans mon Module.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
      public function getServiceConfig()
      {
        return array('factories' => array('Oauth\Model\AccessTokenTable' =>  function($sm) {
    	  $tableGateway = $sm->get('AccessTokenTableGateway');
    	  $table = new AccessTokenTable($tableGateway);
    	  return $table;},
     
    	'AccessTokenTableGateway' => function ($sm) {
    	  $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
    	  $resultSetPrototype = new ResultSet();
    	  $resultSetPrototype->setArrayObjectPrototype(new AccessToken());
    	  return new TableGateway('oauth_provider_access_token', $dbAdapter, null, $resultSetPrototype);},
     
    	'Oauth\Model\ConsumerTable' =>  function($sm) {
    	  $tableGateway = $sm->get('ConsumerTableGateway');
    	  $table = new ConsumerTable($tableGateway);
    	  return $table;},
     
    	'ConsumerTableGateway' => function ($sm) {
    	  $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
    	  $resultSetPrototype = new ResultSet();
    	  $resultSetPrototype->setArrayObjectPrototype(new Consumer());
    	  return new TableGateway('oauth_provider_consumer', $dbAdapter, null, $resultSetPrototype);},
    	),
    ....
    Pour appeler une table, je fais donc dans mon ControllerPlugin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      protected $consumerTable;
      public function getConsumerTable()
      {
        if (!$this->consumerTable) {
          $sm = $this->sm;
     
          $this->consumerTable = $sm->get('Oauth\Model\ConsumerTable');
        }
        return $this->consumerTable;
      }
    Où $sm est obtenu en faisant $this->getServiceLocator() dans mon Controller.

    En appelant la page, j'obtiens l'erreur:
    An abstract factory could not create an instance of oauthmodelconsumertable(alias: Oauth\Model\ConsumerTable).
    Qu'est-ce qu'une abstract factory ?
    Que signifie l'erreur ?
    Y-a-t'il d'autres solutions pour accéder à la DB ?
    Je suis débutant avec ZF2...

    Merci d'avance.

    Gp2mv3

  2. #2
    Membre expérimenté Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Par défaut
    Bonjour Gp2mv3;

    L'erreur te signale que tu utilises une fabrique abstraite du framework. C'est à dire, une classe abstraite qui encapsule plusieurs fabriques communes.

    Or, une classe abstraite ne peut pas et ne doit pas être instanciée. C'est son intérêt, elle n'est jamais chargée en mémoire.

    Dans ton controller l'appel a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sm->get('Oauth\Model\ConsumerTable');
    lève cette exception.

    Pour utiliser une classe abstraite on fait généralement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomDeLaClasse::NomDeLaFonction();
    Tu devrais avoir quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sm::get('Oauth\Model\ConsumerTable');
    Ce code n'est pas fonctionnel, c'est pour te montrer comment on utilise une classe abstraite.

    A+

Discussions similaires

  1. [MySQL] Accéder à un serveur depuis l'extérieur
    Par Leobaillard dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/06/2006, 01h35
  2. [C#] Accéder à un control depuis une class
    Par choas dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/05/2006, 13h43
  3. Accéder à un JavaBean depuis un javascript
    Par guilhemr dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/04/2006, 08h55
  4. [FLASH MX] Accéder à une BD depuis Flash sans php
    Par samanderson dans le forum Flash
    Réponses: 2
    Dernier message: 16/01/2006, 20h04
  5. [debutant] [TOMCAT] Accéder à mes pages depuis internet
    Par Amnesiak dans le forum Tomcat et TomEE
    Réponses: 11
    Dernier message: 27/05/2005, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo