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();
}
}