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