Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 12-03-2013 15:21:17

irumi
Membre
Date d'inscription: 29-04-2011
Messages: 47

Elément de formulaire perso et getValue()

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) :

Code:

[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.


Code:

[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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages