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