checkbox dans l’admin generator de symfony
Lorsque l’on a un champ de type entier dans notre modèle (exemple : champ publié pour une actualité), la champ par défaut de l’admin-generator est un input type text classique, alors qu’un checkbox serait plus approprié.
Pour transformer en checkbox, il suffit de mettre dans le fichier generator.yml le type à « checkbox tag » ainsi :
generator:
class: sfPropelAdminGenerator
param:
model_class: Actualite
theme: default
edit:
fields:
publie: { type: checkbox_tag }
Le problème, c’est que si la valeur par défaut de « publié » dans mon modèle vaut 1, la modification de la checkbox ne sera pas prise en compte lors de l’enregistrement. Pourquoi ?
Parce qu’un checkbox non coché n’a pas la valeur de 0 mais de null. Or, dans la base de données, le null est interdit pour ce champ, c’est donc la valeur par défaut (1) qui est mise à la place.
Il faut donc qu’on force la valeur à 0 quand la case n’est pas cochée.
Pour cela, dans monapp/modules/actualites/actions/actions.class.php, il faut ajouter :
//redéfinition de la fonction d'update de la classe parente
protected function updateActualiteFromRequest()
{
//publié vaut 1 ou null
$publie = $this->getRequestParameter('publie');
if (isset($publie))
{ //s'il vaut 1
$this->actualite->setPublie(1);
}else{
//s'il vaut null, on force 0
$this->actualite->setPublie(0);
}
// Appel de la fonction parente pour gérer le reste de l'update
parent::updateActualiteFromRequest();
}





Par Fred
Et pourquoi ne pas plutot simplement modifier le schema.yml ?
remplacer pour actualite, integer par boolean,
regenerer les classes et cela suffit.
Par Virginie
Est ce que ça changerait vraiment le problème ? Le type Boolean et transformé en tinyint par propel (en tout cas pour une base mySql, où « booleen » est un alias de tinyint(1)).