Checkbox et Liens externes avec yaml et Symfony

Soumis par GoZ le mar 12/05/2009 - 10:11

Checkbox et Liens externes avec yaml et Symfony

Ouvrir un lien externe en popup

Dans mon cas, le but sera d'afficher ce lien dans une page de type liste pour chaque ligne de données avec pourquoi pas des informations sur ces données en paramètres.

Pour rappel, l'objectif principal est d'utiliser au maximum la structure yaml de Symfony pour générer automatiquement mes pages.

Le fichier Apps/backend/modules/mapage/config/Generator.yml devrait ressembler à ça :

generator:
  class:              sfPropelAdminGenerator
  param:
    model_class:      MaPage
    fields:
      msg:
        name:       Message
      titre:
        name:      Titre
    list:
      title:          Liste de MaPage
      layout:         tabular
      display:        [=msg, titre]
      object_actions:
        _edit:        {name: modifier}
        _delete:      {name: supprimer}
        lienExterne:     { name: voir, label: voir, type: link_to, action: executeLienExterne, params: popup=true}

et le fichier Apps/backend/modules/mapage/action/actions.class.php :

class mapageActions extends automapageActions
{
    public function executeLienExterne($request)
    {
        $mapage = $this->getMapageOrCreate();
            $this->redirect('http://www.example.com/service.php?msg=' . $mapage->getMsg());
     }
}

Utiliser une checkbox

Le problème avec la checkbox est de pouvoir prendre en compte quand celle-ci est cochée ou non.

On va donc utiliser la propriété checkbox_tag dans le fichier yaml ce qui permettra de générer une case à cocher dans le formulaire de saisie.

Dans le fichier Apps/backend/modules/mapage/config/Generator.yml :

generator:
  class:              sfPropelAdminGenerator
  param:
    model_class: Mapage
    fields:
      msg:
        name:       Message
      macase:
        name:       Garder une trace
        type:         checkbox_tag

Puis dans le fichier d'action, on surcharge la méthode updateMapageFromRequest().
Dans l'exemple ci-dessous, parent::updateMapageFromRequest() permet de laisser symfony s'occuper des autres champs.

class mapageActions extends automapageActions
{
    protected function updatePageparagrapheFromRequest()
   {
       $mapage = $this->getRequestParameter('mapage');
       if (isset($mapage['macase']))
       {
           $this->mapage->setMacase($mapage['macase']);
       }else{
           $this->mapage->setMapage(0);
       }
       // Let symfony handle the other fields
       parent::updateMapageFromRequest();
    }
}