Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Lors de l'enregistrement dans la base de donnée, j'utilise un modèle qui étend Zend_Db_Table_abstract.
Connexion avec PDO_MYSQL.
Lorsque j'enregistre "Hall d'entrée", je l'affiche dans la vue avec zend_form et j'obtient "Hall d\'entrée"
bootstrap
// Set up layout
Zend_Layout::startMvc(array('setEncode' => 'htmlentities', 'setEncoding' => 'UTF-8'));fichier ini pour Zend_form
[element] name = "releves_photovoltaique" ;action = "/releves_photovoltaique/save" method = "post" attribs.class = "crud_form" ;elements.id.type = "hidden" ;elements.id.options.label = "#" ;elements.id.list = true elements.client_id.type = "select" elements.client_id.options.label = "Client" elements.grd.type = "text" elements.grd.options.label = "Grd" elements.fournisseur_energie.type = "text" elements.fournisseur_energie.options.label = "Fournisseur d'énergie" elements.code_ean.type = "text" elements.code_ean.options.label = "EAN" elements.raccordement_electrique_id.type = "select" elements.raccordement_electrique_id.options.label = "Type de raccordement" elements.numero_compteur.type = "text" elements.numero_compteur.options.label = "Numéro de compteur" elements.consommation_jour.type = "text" elements.consommation_jour.options.label = "Consommation jour" elements.consommation_nuit.type = "text" elements.consommation_nuit.options.label = "Consommation nuit" elements.type_emplacement_id.type = "select" elements.type_emplacement_id.options.label = "Emplacement" elements.type_recouvrement_id.type = "select" elements.type_recouvrement_id.options.label = "Recouvrement" elements.orientation.type = "text" elements.orientation.options.label = "Orientation" elements.orientation.validators.int.validator = "Int" elements.inclinaison.type = "text" elements.inclinaison.options.label = "Inclinaison" elements.inclinaison.validators.int.validator = "Int" elements.surface_disponible.type = "text" elements.surface_disponible.options.label = "Surface disponible" elements.photo_emplacement.type = "checkbox" elements.photo_emplacement.options.label = "Photos" elements.emplacement_compteur.type = "text" elements.emplacement_compteur.options.label = "Emplacement du compteur" elements.emplacement_coffret.type = "text" elements.emplacement_coffret.options.label = "Emplacement du coffret" elements.hauteur_sous_corniche.type = "text" elements.hauteur_sous_corniche.options.label = "Hauteur sous corniche" elements.hauteur_sous_corniche.validators.float.validator = "Float" elements.type_pose_id.type = "select" elements.type_pose_id.options.label = "Type de pose" elements.puissance_desiree.type = "text" elements.puissance_desiree.options.label = "Puissance désirée" elements.pvdatabase.type = "checkbox" elements.pvdatabase.options.label = "PV Database" elements.etat_emplacement_id.type = "select" elements.etat_emplacement_id.options.label = "Etat de l'emplacement" elements.submit.type = "submit" elements.submit.options.label = "Enregistrer" elementFilters.trim = "StringTrim"
le modèle
<?php
/**
 * RelevePhotovoltaiqueModel
 *  
 * @author Thomas Jacquart    
 * @version 0.1
 */
require_once 'Soltom/Db/Table.php';
class RelevesPhotovoltaiqueModel extends Soltom_Db_Table {
    /**
     * The default table name 
     */
    protected $_name = 'releves_photovoltaique';
}La classe étendue
<?php
/**
 * Class personnalisée pour les enregistrements des données de type CRUD
 *  
 * @author Thomas Jacquart    
 * @version 0.1
 */
require_once 'Zend/Db/Table/Abstract.php';
class Soltom_Db_Table extends Zend_Db_Table_Abstract {
    
    /**
     * Retourne tous les résultats pour l'affichage dans la liste
     * 
     * @return rowset
     */
    public function fetchForList() {
        return $this->fetchAll();
    }
    
    /**
     * Retourne l'information d'un élément identifié par la clé primaire 'ID'
     * 
     * @return row
     */
    public function fetchById($id) {
        // TODO test de la valeur de id
        // TODO retour que si un élément existe
        $row = $this->find($id)->current();
        return $row;
    }
    
    function create($data) {
        $row = $this->createRow($data);
        return $row->save();
    }
    
    public function save($id, $data)    {
        $row = $this->fetchById($id);
        $row->setFromArray($data);
        return $row->save();
    }
    
    public function deleteById($id) {
        $row = $this->fetchById($id);
        if (isset($row)) {
            return $row->delete();
        } else {
            return $id;
        }
    }        
}Action controller
<?php
/**
 * ArticlesController
 * 
 * @author Thomas Jacquart
 * @version 0.1
 */
require_once 'Zend/Controller/Action.php';
require_once 'Zend/Form.php';
class Soltom_Controller_Action extends Zend_Controller_Action {
    protected $session;
    protected $form;
    protected $controllerName;
    protected $actionName;
    protected $model;
    protected $iniForm;
    
    public function init() {
        $this->controllerName = $this->_request->getControllerName();
        $this->actionName = $this->_request->getActionName();
        $this->session = new Zend_Session_Namespace($this->controllerName);
        $this->iniForm = new Zend_Config_Ini($this->controllerName . '.ini', 'element');
        $this->view->controllerName = $this->controllerName;
        $this->view->actionName = $this->actionName;
    }
    
...    
    public function viewAction() {
        $id = $this->getParamId();
        $data = $this->model->fetchById($id);
        
        // TODO test que l'enregistrement existe sinon retour list avec message d'erreur    
        $this->session->formAction = '/' . $this->controllerName . '/save/id/' . $id; 
        $this->createForm();
    
        // affectation des valeurs de la base de donnée aux éléments du formulaire
        foreach ($this->form->getElements() as $name => $element) {
            if (isset($data->$name)) {
                $element->setValue($data->$name);
            }
        }
        
        $this->view->form = $this->form;
        $this->render('form');
    }
    
    protected function createForm() {
        // TODO récupération des paramètres depuis un fichier de configuration
        $this->form = new Zend_Form($this->iniForm);
        $this->form->setAction($this->session->formAction);
    }
    
    protected function getParamId() {
        $id = $this->_request->getParam('id');
        if ($id === 'new') {
            // TODO nouvel enregistrement
            $id = 0;
        }
        elseif ($id <= 0) {
            // TODO message d'erreur
            $this->_redirect($this->controllerName . '/list');
        }
        return $id;
    }
}Une idée ?
Merci
JiBe
Dernière modification par JiBe (08-04-2008 14:53:02)
Hors ligne
Moi j'écris simplement dans ma méthodes init() de mon controleur la ligne suivante et ça marche
$this->view->setEscape('utf8_encode');Bon travail
Hors ligne
ziedb a écrit:
Moi j'écris simplement dans ma méthodes init() de mon controleur la ligne suivante et ça marche
Code:
$this->view->setEscape('utf8_encode');Bon travail
j'ai déjà les encodages pour l'utf8, le problème vient des données qui remontent de la base MySQL. Il y a l'échappement de l'apostrophe.
En son temps j'utilisait le mysql_real_escape() lors de l'insertion des données.
Ici avec ZF je sèche un peu.
Je pourrais écrire une classe qui étend pdo_mysql et ajouter le real_escape mais je suis convaincu qu'il y a une autre solution.
Autre idées ?
JiBe
Hors ligne
Bonjour,
T'as regardé si tu n'as pas les magic_quote activés sur ton serveur ? (regarde dans ton phpinfo).
A+, Philippe
Hors ligne
philippe a écrit:
Bonjour,
T'as regardé si tu n'as pas les magic_quote activés sur ton serveur ? (regarde dans ton phpinfo).
A+, Philippe
Ben non j'avais pas regardé !
C'est dans ses moment là qu'on se sent seul ![]()
J'en ai profité pour ajuster le php.ini de MAMP et du httpd.conf, quasi tous les modules sont activés.
Merci Philippe.
A+
JiBe
Hors ligne