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 :

Souci de compréhension d'organisation


Sujet :

Zend Framework PHP

  1. #1
    ldv
    ldv est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 17
    Points
    17
    Par défaut Souci de compréhension d'organisation
    Hello, hello,

    Sensibiliser aux frameworks, je souhaite maintenant m'y mettre, comme on dit.

    J'ai installé Zend etc etc ..., j'ai lu des tutos et j'ai réussi à exécuter des exemples.

    Maintenant, je souhaite faire mon exemple et là, cela se complique.

    Pour l'instant, je souhaite afficher une liste. En soi, rien de difficile et je l'aurai déjà fait en "normal" en 3 minutes.
    Mais maintenant, il y a le modèle MVC et Zend.

    Voici ce que je souhaite faire concrétement :

    1 * afficher un choix sur ma page d'accueil
    2 * lors d'un clic sur un choix, afficher la liste d'une table.

    Rien de bien compliqué

    Voici ce que j'ai fait :

    * Répertoire \www\tutoriel-zf\application\views\scripts\index :
    modification du fichier index.phtml avec ajout du lien :
    <a href="<?php echo $this->url(array('controller'=>'index',
    'action'=>'lettrea', 'id'=>'a'));?>">A</a>
    * Répertoire \www\tutoriel-zf\application\controllers:
    modification du fichier indexController.php avec ajout de l'action "lettrea"
    function lettreaAction()
    {
    $this->view->title = "Liste des fiches de la lettre choisie :";


    $lettre = new Lettrea();
    //$result = $offre->recherche();
    $data = $lettre->fetchAll();

    foreach($this->datas as $data)
    {
    echo $this->escape($data->title);
    }

    /*

    $form = new FormulaireAlbum();
    $form->submit->setLabel('Enregistrer');
    $this->view->form = $form;

    if ($this->_request->isPost()) {
    $formData = $this->_request->getPost();
    if ($form->isValid($formData)) {
    $albums = new Albums();
    $id = (int)$form->getValue('id');
    $row = $albums->fetchRow('id='.$id);
    $row->artist = $form->getValue('artist');
    $row->title = $form->getValue('title');
    $row->save();

    $this->_redirect('/');
    } else {
    $form->populate($formData);
    }
    } else {
    // L'id de l'album est attendu dans $params['id']
    $id = (int)$this->_request->getParam('id', 0);
    if ($id > 0) {
    $albums = new Albums();
    $album = $albums->fetchRow('id='.$id);
    $form->populate($album->toArray());
    }
    }
    */

    }
    * Répertoire \www\tutoriel-zf\application\models :
    création du fichier Lettrea.php avec comme contenu :
    <?php

    class Lettrea extends Zend_Db_Table
    {
    // protected $primary = "user_id";

    public function __construct()
    {

    /*
    $db = Zend_Registry::get("dbAdapter");
    $select = $db->select();
    $select->from('albums', array('artist', 'title'));

    // $select->where('offre_contrat= ?', $offre_contrat);
    // $select->where('offre_activite= ?', $offre_activite);
    // $select->where('offre_dep= ?', $offre_dep);

    // et ensuite on exécute la requête SQL
    $result = $this -> fetchAll($select);
    */

    $db = Zend_Registry::get("dbAdapter");
    // On prépare ici la requête SQL et on ne l'exécute pas
    $select = $this -> select() -> from('albums',array('artist','title'));
    // -> where('user_id = ? ',$userId)
    // -> where('actif = 1');
    /*
    Comme vous pouvez le voir, on chaine les appels avec PHP et donc on creer
    notre requête SQL à partir des méthode de la classe.
    Correspondance SQL :

    SELECT id, lastname, firstname FROM users WHERE user_id = ? AND actif = 1

    */
    // et ensuite on exécute la requête SQL
    $result = $this -> fetchRow($select);

    }
    }
    Dans le code, il y a différentes traces, différents cas.

    Pour l'instant, j'obtiens ceci :

    Fatal error: Uncaught exception 'Zend_Exception' with message 'No entry is registered for key 'dbAdapter'' in C:\wamp\www\tutoriel-zf\library\Zend\Registry.php:145 Stack trace: #0 C:\wamp\www\tutoriel-zf\application\models\Lettrea.php(23): Zend_Registry::get('dbAdapter') #1 C:\wamp\www\tutoriel-zf\application\controllers\IndexController.php(131): Lettrea->__construct() #2 C:\wamp\www\tutoriel-zf\library\Zend\Controller\Action.php(502): IndexController->lettreaAction() #3 C:\wamp\www\tutoriel-zf\library\Zend\Controller\Dispatcher\Standard.php(293): Zend_Controller_Action->dispatch('lettreaAction') #4 C:\wamp\www\tutoriel-zf\library\Zend\Controller\Front.php(946): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #5 C:\wamp\www\tutoriel-zf\index.php(32): Zend_Controller_Front->dispatch() #6 {main} thrown in C:\wamp\www\tutoriel-zf\library\Zend\Registry.php on line 145
    Qui peut m'aider

  2. #2
    ldv
    ldv est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Sur ce post, j'ai trouvé une partie de la réponse :


    http://www.developpez.net/forums/d57...leme-registre/

    Il faut ajouter ceci dans le index.php :

    Zend_Registry::set('dbAdapter', $db);
    Pour le tuto pour les albums, il manque donc cette ligne à la page 15.


    Maintenant, j'ai ceci :

    Catchable fatal error: Argument 1 passed to Zend_Db_Select::__construct() must be an instance of Zend_Db_Adapter_Abstract, null given, called in C:\wamp\www\tutoriel-zf\library\Zend\Db\Table\Select.php on line 69 and defined in C:\wamp\www\tutoriel-zf\library\Zend\Db\Select.php on line 156
    Si quelqu'un a déjà eu ce souci, je suis preneur.
    Ce qui m'interpelle, c'est l'appel à Zend_Db_Adapter_Abstract.

  3. #3
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Salut,

    $db doit être une instance d'un Zend_Db_Adapter, en d'autres termes une connexion à ta base de données. Tu devrais donc avoir un code de ce genre dans ton index.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $params = array(
        'host'           => 'my_host',
        'username'       => 'my_username',
        'password'       => 'my_password',
        'dbname'         => 'my_db'
    );
    $db = Zend_Db::factory('Pdo_Pgsql', $params);
    Dans cet exemple il s'agit d'une connexion à une base PostgreSQL, à toi d'adapter à ton SGBDR. Les paramètres de connexion peuvent être chargés à partir d'un fichier INI ou XML plutôt qu'apparaître comme ici littéralement, tu peux spécifier le Db_Adapter à instancier plutôt qu'utiliser une factory, mais le principe général reste le même.

    Que faire ensuite de $db ? Le placer comme tu as fait dans le registre pour le réutiliser ensuite dans des méthodes de tes classes Zend_Db_Table est assez fastidieux (et il aurait fallu le passer en paramètres à select()), et ne se justifie que dans un environnement multibases. Il est préférable d'indiquer (toujours dans index.php) que cette connexion sera utilisée implicitement par tous les Zend_Db_Table_Select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zend_Db_Table_Abstract::setDefaultAdapter($db);
    Un dernier point : le constructeur de ta classe Lettrea n'est pas le bon endroit pour lancer une requête SQL (tu sembles d'ailleurs en lancer deux à la suite, ce n'est pas très logique ), place plutôt ce code dans une méthode créée à cet usage.

Discussions similaires

  1. Souci de compréhension de usort
    Par Jcpan dans le forum Langage
    Réponses: 4
    Dernier message: 26/01/2010, 13h14
  2. [XL-97] Filtre avec VBA : Des Soucis de compréhension
    Par Kalimera18 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/05/2009, 20h51
  3. Souci de compréhension du résultat
    Par Eclipse39 dans le forum Débuter
    Réponses: 2
    Dernier message: 15/03/2009, 23h58
  4. [JTable][RowFilter] Souci de compréhension
    Par mavina dans le forum Composants
    Réponses: 1
    Dernier message: 11/09/2008, 10h33
  5. Petit soucis de compréhension
    Par AlexB59 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/10/2005, 10h18

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