skip to content

Zend Framework et Dojo, valider un formulaire

L'arrivée de Dojo dans la framework Zend est une très belle chose. Cela permet de créer rapidement des formulaires professionnels et cela sans avoir des connaissances pointues en javascript.

Pour valider un formulaire Dojo avant de soumettre la page au serveur, il faut commencer par créer une aide de vue qui contiendra le code suivant :

<?php
/**
 * Render head dojo script to validate the form
 *
 */
class ValidateDojoForm extends Zend_View_Helper_Abstract
{
public $view;

public function setView(Zend_View_Interface $view)
{
$this->view = $view;
}

    /**
     * action onSubmit() will validate the form
     *
     * @param  string $id_form of the form
     * @return void
     */
    public function ValidateDojoForm($id_form)
    {
$this->view->headScript()->captureStart(); ?>
        function validateDojoForm() {
            var form = dijit.byId("<?php echo $id_form; ?>");
            if (!form.validate()) {
                return false;
            }
            return true;
        }
        dojo.addOnLoad(function () {
            dojo.connect(dijit.byId("<?php echo $id_form; ?>"),
                         "onSubmit",
                         "validateDojoForm");
        });
<?php $this->view->headScript()->captureEnd();
    }
}

Vous devez annoncer le répertoire où se trouve le fichier contenant le helper au Zend Framework. Cette action est déjà décrite dans notre autre article Zend Framework View Helper pour GoogleAnalytics.

Vous pouvez maintenant vous servir de votre helper pour valider un formulaire Dojo de la sorte :

$view->ValidateDojoForm('id_du_formulaire');

Pour finir, si on veut aller un tout petit peu plus loin, il est tout à fait possible d'étendre la classe Zend_Dojo_Form pour que ce soit fait automatiquement à chaque fois que l'on affiche un formulaire, le plus simple étant de servir de la fonction setName().

class My_Dojo_Form extends Zend_Dojo_Form
{
    /**
     * Set form name and add onSubmit Dojo validation
     *
     * @param  string $name
     * @return Zend_Form
     */
    public function setName($name)
    {
        parent::setName($name);
        $this->getView()->validateDojoForm($this->getName());
        return $this;
    }
}

Maintenant, quand l'on crée un formulaire, il suffit de l'étendre à notre classe personalisée pour que tous les formulaires soient validés avec Dojo.

LoginForm extends My_Dojo_Form
{
    public function init()
    {
        $this->setName('login_form')

        ...
    }
}

Pour savoir quoi valider, il faudra attendre notre prochain article sur le Framework Zend qui parlera des auto-complétions.

Powered by Drupal. CrystalX theme created by Nuvio | Webdesign.