Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour, il y a un point que je ne comprend pas avec les élément de formulaire perso.
Mon élément perso (un date picker) :
[lang=php] <?php namespace Pw\Form\Element; use Zend\InputFilter\InputProviderInterface; use Zend\Form\Element; class DatePicker extends Element implements InputProviderInterface { /** * Seed attributes * * @var array */ protected $attributes = array( 'type' => 'datePicker', ); protected $validator = null; public function getInputSpecification() { return array( 'name' => $this->getName(), 'required' => false, 'filters' => array( array('name' => 'StringTrim'), array('name' => 'StripTags'), ), 'validators' => array( $this->getValidator(), ), ); } public function getValue() { $value= parent::getValue(); $val = explode('/', $value); if(count($val)==3) return $val[2].'-'.$val[1].'-'.$val[0]; else return $value; } public function setValue($value) { $val = explode('-', $value); if(count($val)==3) $value = $val[0].'-'.$val[1].'-'.$val[2]; parent::setValue($value); } protected function getValidator() { if (null === $this->validator) { $this->validator = new \Zend\Validator\Regex('`^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$`'); } return $this->validator; } }
Lorsque je l'intègre dans mon formulaire tous va bien, c'est au moment ou je récupère les données posté que ça me pose problème. Ma méthode getValue n'est pas appelé (elle change le format des dates). Apparement il apelle le getValue de inputForm et non celle de mon élément.
Quelqu'un aurait un solution? pour le moment je vais faire manuellement le changement de format de mes date mais j'aimerais que ça ce fasse tous seul.
Voici le code de mon controller qui récupère les données du formulaire.
[lang=php] public function editAction() { $id = $this->getEvent()->getRouteMatch()->getParam('id', 0); $sm = $this->getServiceLocator(); $NewsTable = $sm->get('NewsTable'); $form = new \Admin\Form\NewsForm(); if($id != 0) { //si c'est une modification on charge les donnée de la base $ligne = $NewsTable->fetchRow('id = '.$id); $form->setData($ligne); } $request = $this->getRequest(); if ($request->isPost()) { $formData = $request->getPost();//on récupère les données postées $form->setData($formData);//on remet les donnée dans les éléments de formulaire if ($form->isValid()) { $formData = $form->getData();//on récupère les données postées var_dump($formData);die; unset($formData['envoyer']);unset($formData['control']); //regarder le validateur de int et ne pas faire une novuelle insertion mais une mise a jour if($id != 0) $NewsTable->update($formData, 'id = '.$id); else $NewsTable->insert($formData); $this->flashMessenger()->addMessage(array('Mise à jour éffectué', 'La modification du contenu à bien été enregistré.')); return $this->plugin('redirect')->toUrl('/admin/news'); } } return array('form'=> $form, 'id'=>$id); }
Hors ligne