• Connexion à la base de données et afficher une page avec Zend

    image de l'aticle Connexion à la base de données et afficher une page avec Zend

    Premier affichage d'informations avec Zend FrameWork

    Dans cet exemple nous allons voir comment faire un premier affichage d'information avec Zend Framework en requêtant une base de donnés créée pour l'exemple.
    Commencez à lancer votre serveur apache et dans votre navigateur allez sur http://localhost/phpmyadmin/
     
    Créez une base de données comme suit :
    CREATE DATABASE bdd_zend;
    
    Dans cette base de données nous allons créer la table utilisateurs puis plusieurs colonnes se rapportant aux informations tapées par un utilisateur qui se serait inscrit sur le site.
    CREATE TABLE `utilisateurs` (
      `utilisateurs_id` int(11) NOT NULL AUTO_INCREMENT,
      `utilisateurs_nom` varchar(40) NOT NULL,
      `utilisateurs_prenom` varchar(50) NOT NULL,
      `utilisateurs_photo` varchar(255) DEFAULT NULL,
      `utilisateurs_adresse` varchar(255) DEFAULT NULL,
      `utilisateurs_codepostale` int(5) DEFAULT NULL,
      `utilisateurs_ville` varchar(120) DEFAULT NULL,
      `utilisateurs_telephone` varchar(32) DEFAULT NULL,
      `utilisateurs_portable` varchar(32) DEFAULT NULL,
      `utilisateurs_date_added` datetime NOT NULL,
      `utilisateurs_last_date_modified` datetime DEFAULT NULL,
      PRIMARY KEY (`utilisateurs_id`)
    );
    
    Ceci fait nous allons maintenant ouvrir le fichier application/configs/application.ini et allons y mettre les lignes suivantes dont nous aurons besoin pour nous connecter à la base de données :
    [production]
    ...
    database.adapter = PDO_MYSQL
    database.params.host = localhost
    database.params.username = root
    database.params.password = **********
    database.params.dbname = bdd_zend
    
    Ceci fait nous allons dans public/index.php. Après l'installation de votre application Zend Framework en ligne de commande se fichier devrait avoir les lignes suivantes :
    <?php
    // Define path to application directory
    defined('APPLICATION_PATH')
        || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
    
    // Define application environment
    defined('APPLICATION_ENV')
        || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
    
    // Ensure library/ is on include_path
    set_include_path(implode(PATH_SEPARATOR, array(
        realpath(APPLICATION_PATH . '/../library'),
        get_include_path(),
    )));
    
    /** Zend_Application */
    require_once 'Zend/Application.php';
    
    // Create application, bootstrap, and run
    $application = new Zend_Application(
        APPLICATION_ENV,
        APPLICATION_PATH . '/configs/application.ini'
    );
    
    $application->bootstrap()
                ->run();
    
    Nous allons maintenant rajouter du code pour se connecter à la base de données et mettre cette connexion apr défaut, votre fichier sera maintenant comme suit :
    <?php
    
    // Define path to application directory
    defined('APPLICATION_PATH')
        || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
    
    // Define application environment
    defined('APPLICATION_ENV')
        || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
    
    // Ensure library/ is on include_path
    set_include_path(implode(PATH_SEPARATOR, array(
        realpath(APPLICATION_PATH . '/../library'),
        get_include_path(),
    )));
    
    /** Zend_Application */
    require_once 'Zend/Application.php';
    require_once 'Zend/Loader/Autoloader.php';
    Zend_Loader_Autoloader::getInstance();
    
    // Create application, bootstrap, and run
    $application = new Zend_Application(
        APPLICATION_ENV,
        APPLICATION_PATH . '/configs/application.ini'
    );
    
    // Chargement automatique de Zend_Db_Adapter_Pdo_Mysql, et instanciation.
    $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'production');
    
    $db = Zend_Db::factory($config->database->adapter,array(
      'host'      => $config->database->params->host, 
      'username'  => $config->database->params->username,
      'password'  => $config->database->params->password,
      'dbname'    => $config->database->params->dbname,
        )
    );
    
    // placons la connexion dans un registre global à l'application
    $registry = Zend_Registry::getInstance();
    $registry->set('db', $db);
    
    // en faire la connexion par defaut
    Zend_Db_Table::setDefaultAdapter($db);
    Zend_Registry::set('dbAdapter', $db); 
    
    $application->bootstrap()
                ->run();
    
    Avant de continuer insérons dans notre table utilisateurs une ligne qu'on affichera par la suite :
    INSERT INTO `utilisateurs` (`utilisateurs_id`, `utilisateurs_nom`, `utilisateurs_prenom`, `utilisateurs_photo`, `utilisateurs_adresse`, `utilisateurs_codepostale`, `utilisateurs_ville`, `utilisateurs_telephone`, `utilisateurs_portable`, `utilisateurs_date_added`, `utilisateurs_last_date_modified`) VALUES
    ('', 'Dupond', 'Henry', NULL, '1058, rue des colombes', 31300, 'Toulouse', '0567081028', '0664483615', '2011-06-06 10:05:59', NULL);
    
    Nous avons maintenant une base de données, une table utilisateurs avec une entré et la connexion à à cette même base de données côté application .
    Maintenant nous allons utiliser un » Table Data Gateway pour se connecter à notre source de données; Zend_Db_Table propose cette fonctionnalité. Créons les classes basées sur Zend_Db_Table.
    Créez un fichier dans application/models/DbTable/Utilisateurs.php et écrivons la classe suivante :
    <?php
    class Application_Model_DbTable_Utilisateurs extends Zend_Db_Table_Abstract
    {
        /** Table name */
        protected $_name    = 'utilisateurs';
    }
    
    Notez le préfixe de classe: Application_Model_DbTable. Gardez-le comme ce-dessus.
    Créons maintenant un » Data Mapper. Un » Data Mapper fait correspondre un objet métier à la base de données. Dans notre cas Application_Model_Utilisateurs vers la source de données Application_Model_DbTable_Utilisateurs.
    Maintenant créez le fichier application/models/UtilisateursMapper.php et mettez-y ceci :
    <?php 
    class Application_Model_UtilisateursMapper
    {
        protected $_dbTable;
     
        public function setDbTable($dbTable)
        {
            if (is_string($dbTable)) {
                $dbTable = new $dbTable();
            }
            if (!$dbTable instanceof Zend_Db_Table_Abstract) {
                throw new Exception('Invalid table data gateway provided');
            }
            $this->_dbTable = $dbTable;
            return $this;
        }
     
        public function getDbTable()
        {
            if (null === $this->_dbTable) {
                $this->setDbTable('Application_Model_DbTable_Utilisateurs');
            }
            return $this->_dbTable;
        }
    
        public function save(Application_Model_Utilisateurs $utilisateurs)
        {
            $data = array(
                'utilisateurs_nom'   => $utilisateurs->getUtilisateurs_nom(),
                'utilisateurs_prenom'   => $utilisateurs->getUtilisateurs_prenom(),
                'utilisateurs_photo'   => $utilisateurs->getUtilisateurs_photo(),
                'utilisateurs_adresse'   => $utilisateurs->getUtilisateurs_adresse(),
                'utilisateurs_codepostale'   => $utilisateurs->getUtilisateurs_codepostale(),
                'utilisateurs_ville'   => $utilisateurs->getUtilisateurs_ville(),
                'utilisateurs_telephone'   => $utilisateurs->getUtilisateurs_telephone(),
                'utilisateurs_date_added'   => date('Y-m-d H:i:s'),
                'utilisateurs_last_date_modified'   => date('Y-m-d H:i:s'),
            );
     
            if (null === ($utilisateurs_id = $utilisateurs->getUtilisateurs_id())) {
                unset($data['utilisateurs_id']);
                $this->getDbTable()->insert($data);
            } else {
                $this->getDbTable()->update($data, array('utilisateurs_id = ?' => $utilisateurs_id));
            }
        }
     
        public function find($utilisateurs_id, Application_Model_Utilisateurs $utilisateurs)
        {
            $result = $this->getDbTable()->find($utilisateurs_id);
            if (0 == count($result)) {
                return;
            }
            $row = $result->current();
            $utilisateurs->set_Utilisateurs_id($row->utilisateurs_id)
                ->set_Utilisateurs_nom($row->utilisateurs_nom)
                ->set_Utilisateurs_prenom($row->utilisateurs_prenom)
                ->set_Utilisateurs_photo($row->utilisateurs_photo)
                ->set_Utilisateurs_adresse($row->utilisateurs_adresse)
                ->set_Utilisateurs_codepostale($row->utilisateurs_codepostale)
                ->set_Utilisateurs_ville($row->utilisateurs_ville)
                ->set_Utilisateurs_telephone($row->utilisateurs_telephone)
                ->set_Utilisateurs_date_added($row->utilisateurs_date_added)
                ->set_Utilisateurs_last_date_modified($row->utilisateurs_last_date_modified);
        }
    
        public function fetchAll()
        {
            $resultSet = $this->getDbTable()->fetchAll();
            $entries   = array();
            foreach ($resultSet as $row) {
                $entry = new Application_Model_Utilisateurs();
                $entry->set_Utilisateurs_id($row->utilisateurs_id)
                ->set_Utilisateurs_nom($row->utilisateurs_nom)
                ->set_Utilisateurs_prenom($row->utilisateurs_prenom)
                ->set_Utilisateurs_photo($row->utilisateurs_photo)
                ->set_Utilisateurs_adresse($row->utilisateurs_adresse)
                ->set_Utilisateurs_codepostale($row->utilisateurs_codepostale)
                ->set_Utilisateurs_ville($row->utilisateurs_ville)
                ->set_Utilisateurs_telephone($row->utilisateurs_telephone)
                ->set_Utilisateurs_date_added($row->utilisateurs_date_added)
                ->set_Utilisateurs_last_date_modified($row->utilisateurs_last_date_modified);
                $entries[] = $entry;
            }
            return $entries;
        }
    }
    
    Enfin, pour connecter tous ces éléments ensemble, créons un contrôleur qui listera les entrées de la base de données.
    On va créer UtilisateursController dans application/controllers/UtilisateursController.php, avec une seule action indexAction(). Nous allons utiliser l'action "index" pour lister toutes les entrées de l'utilisateur.
    Un aterrissage sur indexAction() devra lister toutes les entrées des utilisateurs. Ceci ressemblera à cela :
    <?php 
    class UtilisateursController extends Zend_Controller_Action
    {
        public function indexAction()
        {
            $utilisateurs = new Application_Model_UtilisateursMapper();
            $this->view->entries = $utilisateurs->fetchAll();
        }
    }
    
    Un script de vue sera nécessaire pour afficher le tout. Créez un fichier dans application/views/scripts/utilisateurs/index.phtml pour y inclure ces lignes :
        <!-- application/views/scripts/guestbook/index.phtml -->
         
        <p><a href="<?php echo $this->url(
            array(
                'controller' => 'utilisateurs',
                'action'     => 'sign'
            ),
            'default',
            true) ?>">Êtes-vous un utilisateur</a></p>
         
        Utilisateur: <br />
        <dl>
            <?php foreach ($this->entries as $entry): ?>
            <dt><?php echo $this->escape($entry->utilisateurs_nom) ?></dt>
            <dd><?php echo $this->escape($entry->utilisateurs_prenom) ?></dd>
            <dt><?php echo $this->escape($entry->utilisateurs_photo) ?></dt>
            <dt><?php echo $this->escape($entry->utilisateurs_adresse) ?></dt>
            <dt><?php echo $this->escape($entry->utilisateurs_codepostale) ?></dt>
            <dd><?php echo $this->escape($entry->utilisateurs_ville) ?></dd>
            <dt><?php echo $this->escape($entry->utilisateurs_telephone) ?></dt>
            <dd><?php echo $this->escape($entry->utilisateurs_portable) ?></dd>
            <dt><?php echo $this->escape($entry->utilisateurs_date_added) ?></dt>
            <dd><?php echo $this->escape($entry->utilisateurs_last_date_modified) ?></dd>
            <?php endforeach ?>
        </dl>
    

    Maintenant dans votre navigateur tapez l'adresse de votre site en local puis utilisateurs comme ceci : www.monsiteenlocal.fr/utilisateurs, vous devriez voir afficher les colonnes se trouvant dans la table utilisateurs, en l'occurence il devrait y avoir une seule ligne en retour.
     
    Ce tuto à été réalisé grâce au manuel Zend Framework se trouvant sur cette page : http://framework.zend.com/manual/fr/learning.quickstart.create-model.html.
     

Laissez un commentaire

* Votre e-mail ne sera jamais utilisé ou donné à un tiers

Recherche

Catégories

Newsletters

Archives