Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
J'ai commencé à regardé les sources là.
Y'as déjà plein de choses
Par contre je sais pas si c'est une bonne méthode pour tout ce qui est gestion de formulaire moi je groupe l'édition et l'ajout avec une methode formAction() et une méthode saveAction()
Si vous voulez un exemple, je trouve ça plus claire en faire car hormis quelques points c les mêmes controles, les mêmes procédures et grâce à Zend_Db un update ou insert suffise
Hors ligne
Salut,
Je vais réfléchir à ta suggestion, c'est intéressant.
Même en dissociant les deux, tel qu'actuellement, je trouve que ça reste relativement compact, puisque j'utilise un composant "maison" qui gère l'affichage et la validation des formulaires, même en multipages (c'est un composant basé sur composite/visitor).
Pour l'instant chaque action est gérée schématiquement de cette façon :
public function editAction() { if (isset($form_submitted)) { /* Update */ } else { $myform = new Form(); $myform->addPage(); $myform->addField("titre", [...]); [...] $this->view->form = $myform; } }
Ce que tu proposes, c'est d'appeler une nouvelle méthode "saveAction" pour effectuer Insert ou Update au lieu de le gérer dans editAction ou addAction, c'est bien ça ?
Hors ligne
voilà c'est ça
Euh je me sens ignorant d'un coup. C'est quoi composite/visitor ?
Je te montrerais un bout de code demain.
En fait je gère la validation dans mon model aussi.
Hors ligne
Salut,
Composite et Visitor sont des motifs de conception ("design patterns"), des éléments d'architecture logicielle. Ne te sens pas ignorant, je suis loin d'être un expert
Si tu veux des infos à ce sujet : http://www.patternsforphp.com
Par ailleurs, pour info, le composant qui gère mes formulaires se situe dans app/lib/My/Formosite/, et Formosite.mod.php répertorie toutes les classes impliquées.
Il serait intéressant d'intégrer Zend_Filter_Input pour intercepter $_POST et appliquer les mécanismes de validation. Je ne l'ai pas étudié en détail, mais puisque l'objectif est aussi de valoriser le ZF, je suis tout à fait prêt à abandonner mon composant "home-made" au profit des mécanismes du ZF. Qu'en pensez vous ?
A+
Hors ligne
Ok je suis allé me documenter un peu. . Dans un soucis de clareté et simplicité je pense qu'il serait mieux d'utiliser toutes les possibiltiées du ZF. Mais je suis ouvert à de nouveaux apprentissages .
Je te montre un petit bout de code, c'est pour une plateforme d'ecommerce multilingue.
La méthode form, qui gérer l'affichage du formulaire. Elle prend en compte l'affichage pour ajoute / modification et réaffichage en cas d'erreurs de validation.
public function formAction() { include 'categorie.php'; if( ( $objects = $this->_getParam('objects', NULL) ) == NULL ){ $_partenaire = new partenaire(); $_partenaire_data = new partenaire_data(); if( ( $id = $this->_getParam('id', NULL) ) != NULL){ $partenaire= $_partenaire->find($id)->toArray(); $partenaire= $partenaire[0]; $partenaire_data= $_partenaire_data->byPartenaireId($id); } else{ $partenaire = $_partenaire->fetchNew()->toArray(); $partenaire_data['fr_FR'] = $_partenaire_data->fetchNew()->toArray(); $partenaire_data['fr_FR']['content'] = 'Votre contenu en Français'; $partenaire_data['fr_FR']['language'] = 'fr_FR'; } } else{ $partenaire = $objects['partenaire']; $partenaire_data= $objects['partenaire_data']; } $this->view->partenaire = $partenaire; $this->view->partenaire_data = $partenaire_data; $_categorie = new categorie(); $categories = $_categorie->selectOptions(); foreach ($categories as $key => $categorie) { $categories[$key]['selected']= ($categorie['id'] == $partenaire['categorie_id']) ? true : false; } $this->view->categories = $categories; $this->render(); }
La méthode save qui gére donc la validation grâce au model et l'insert / l'update si un id existe ou pas.
public function saveAction() { $_partenaire = new partenaire(); $_partenaire_data = new partenaire_data(); $errors = array(); $my_partenaire = $_partenaire->valid($this->getRequest()->getPost('partenaire')); $my_partenaire_data = $_partenaire_data->valid($this->getRequest()->getPost('partenaire_data')); $my_logo = $_FILES['logo']; if( $_partenaire->has_errors() ) $errors['partenaire'] = $_partenaire->get_errors(); if( $_partenaire_data->has_errors() ) $errors['partenaire_data'] = $_partenaire_data->get_errors(); if( !empty($errors) ) { $data = array('partenaire'=>$my_partenaire); $this->_forward('form', 'partenaire', null, array('data' => $data, 'errors' => $errors)); return ; } else { $my_partenaire['url'] = Dis_Filter::url($my_partenaire['title']); if($my_partenaire['id'] > 0){ $_partenaire->update($my_partenaire, 'id = '.$my_partenaire['id']); foreach ($my_partenaire_data as $item){ $item['partenaire_id'] = $my_partenaire['id']; $_partenaire_data->update($item, 'id = '.$item['id']); } $flash_message['state'] = 'true'; $flash_message['message'] = "Le partenaire est mis à jour"; } else{ $my_partenaire['id'] = $_partenaire->insert($my_partenaire); foreach ($my_partenaire_data as $item){ $item['partenaire_id'] = $my_partenaire['id']; $_partenaire_data->insert($item); } $flash_message['state'] = 'true'; $flash_message['message'] = "Le partenaire est ajouté"; } $this->session->flash_message = $flash_message; $this->_redirect('/partenaire/index'); } }
Dans le model on utilise Zend_Filter_Input pour valider et zoup
Voilà vous en pensez quoi ?
Hors ligne
Ca me paraît bien. Tu penses que tu pourrais proposer un système de CRUD basé là-dessus pour le "ZFBlog" ?
Peut-être pourrait-on remplacer l'opération de suppression par un changement d'état (brouillon / publié), je pense à WordPress en disant ça. De toute façon il faut qu'on reparle de la base de données. Je suis parti sur SQLite pour faciliter l'installation (qui est déjà un peu spéciale) et parce que l'accès en écriture n'est pas sensé être massif sur un blog, mais je n'ai pas d'expérience avec ce type de base. Vous avez un avis sur la question ?
Hors ligne
Oui y'as moyen de développer rapidement les actions de bases comme ça. Il faudrait avoir l'avis de Phillipe aussi ? Et biensûr d'autres sont bienvenus !
Je pense que grâce au ZF on pourrait facilement proposer du sqlite et mysql.
Je n'ai jamais utilisé sqlite par contre. Bon peut de choses changes.
Par contre si on utilise Mysql par défaut. Pourquoi ne pas utiliser à fond les possibilités de ce SGBD ?
Je pense aux vues, triggers. Un Mysql 5 biensûr.
ZfBlog / Cms pourrait être un concentré des dernières "technologies". On reproche souvent à Php d'être un peu "amateur". Je pense qu'en ayant un code "dernière génération" et en utilisant les pleines fonctionnalités des différents outils celà ferait un beau bébé
Hors ligne
Effectivement, avis aux ZFiens de bonne volonté ! Je pense qu'on a largement de quoi se partager la tâche... Sutout avec les ambitions de Yannux
Si on part sur MySQL par défaut, je doute que la couche d'abstraction résiste suffisamment longtemps pour SQLite : les fonctionnalités sont quand même largement plus limitées. Mais ça me va.
A+
Dernière modification par thomas (03-08-2007 20:08:01)
Hors ligne
intéressant comme sujet!
Sinon je voix pas pk vous vous préoccupez d'uen base de donnée particulière, si l'on utilise pdo les mécanismes sont assez simple et comme ZF a des système de construction de requête ...
perso je compte suivre avec attention ce que vous faites ...
Hors ligne
Surtout pour l'optimisatio en faite.
Par exemple tu n'as pas de vue ou triggers dans sqlite je crois.
En faite oui comme dit thomas j'ai de l'ambition J'aimerais qu'on réalise une plateforme assez puissante quand même. Pas forcément accessible au plus grand public niveau installation. Mais quelquechose de très fonctionnel. plutot orienté professionel, ou "semi-pro".
Qu'en pensez vous ?
En gros wordpress c'st génial, j'adore, je l'utilise dans ma boite, mais niveau code ça fait mal. C'est pas une mauvaise critique, c'est juste l'occasion avec le ZF de construire du solide, clean....
Je voudrais pas paraitre méchant !
Hors ligne
Je suis assez en accord avec ce que tu dis, yannux, mais dans ce cas il faut peut-être envisager de plancher directement sur un CMS, car si on propose un moteur de blog inaccessible à l'utilisateur de base, qui va s'en servir ?
Hors ligne
CREATE TABLE articles ( id INTEGER not null PRIMARY KEY, title varchar (150) not null, body text not null, date date not null, time time not null, author varchar (50) not null, url varchar (100) not null, perm varchar(150) not null ); CREATE TABLE users ( id INTEGER not null PRIMARY KEY, login varchar(10) not null, password varchar (10) not null, role varchar (10) not null );
A+
Hors ligne
+1 pour thomas, anglais facilitera l'internationalisation du coding, et implementer de base Zend_Translate permettra de ne pas avoir à le gérer plus tard
Pour i18n, j'utiliserai plusieurs instance de Zend_Translate.
2 instances (erreur, interface) par partie (admin, module, interface générale)
1 pour la gestion des dates
Cela me semble assez modulaire et permettrai d'éviter de charger 1 seul gros fichiers.
My 2 cents
Hors ligne
Ca me va aussi. On met les messages en anglais par défaut ? et on fait la translation FR de base ?
L'anglais est généralement plus connu pour étoffer les futures langues traduites. ?
Concernant la base de donnée je trouve celle de DC2 très bien foutue...je sais pas si certains on déjà vue ? Je pense qu'on a le droit de la reprendre en le précisant ?
Dernière modification par yannux (06-08-2007 13:13:47)
Hors ligne
yannux a écrit:
Concernant la base de donnée je trouve celle de DC2 très bien foutue...je sais pas si certains on déjà vue ? Je pense qu'on a le droit de la reprendre en le précisant ?
Le plus simple serait de demander à la DC team a voir aussi la DB de Wordpress Mu
Hors ligne
Le mieux est, je pense, anglais par défaut, avec une traduction FR pour la première beta, c'est le minimum (on est sur z-f.fr, quand même ).
je ne suis pas un expert SGBD, reprendre quelquechose qui fonctionne bien est peut-être une bonne idée. Surtout si tu la connais déjà. Reste à voir avec la DC team avec moultes courbettes
Hors ligne