2012-01-09 2 views
0

Sur Symfony 1.4.11, j'ai un champ booléen qui est défini sur un formulaire par une case à cocher HTML. Lorsque la valeur est 0 (sans contrôle), puis le code HTML de la case à cocher estSymfony enregistre toujours les cases à cocher comme

<input type="checkbox" value="" name="gift_type[valid]"> 

Lorsque je tente de sauver l'est de celui-ci toujours sauvé comme zéro, je suppose que l'entrée n'a pas de valeur.

Le code que j'utilise pour la case à cocher est généré par le générateur d'administration de symfony, donc je pensais que cela fonctionnerait "prêt à l'emploi". Si je désélectionne une vraie valeur, cela fonctionne comme prévu.

schema.yml

GiftType: 
    columns: 
    valid: { type: boolean, notnull: true, default: true } 

BaseGiftTypeForm.class.php

$this->setWidgets(array(
    'valid' => new sfWidgetFormInputCheckbox() 
)); 
$this->setValidators(array(
    'valid' => new sfValidatorBoolean(array('required' => false)) 
)); 

Répondre

0

Votre case HTML semble drôle, êtes-vous sûr qu'il a été généré par symfony? (L'id manque à savoir)

<input type="checkbox" name="gift_type[valid]" checked="checked" id="gift_type_valid" /> 

Quoi qu'il en soit tout le code est OK montrer, il n'y a pas besoin de changer le type de schéma! (ping @richrosa). sfValidatorBoolean renvoie une valeur booléenne, puis est transmise à l'objet, puis l'objet est enregistré. Vous devez déboguer votre modèle. Dès la sortie de la boîte, un champ booléen dans le générateur d'administration Doctrine fonctionne parfaitement.

Vous pouvez ajouter ce code dans votre classe GiftTypeForm pour aider debug:

protected function doUpdateObject($values) 
    { 
    var_dump($values);die(); 
    $this->getObject()->fromArray($values); 
    } 

Si vous ne voyez pas le booléen clé « valide », il y a une erreur de processus de validation, si elle est là, vous avez un problème de modèle (avez-vous remplacer la méthode de sauvegarde?).

+0

Il semble que sfWidgetFormInputCheckbox ait été remplacé par un fichier du même nom dans/lib/vender/symfony/widget où ses méthodes de rendu affichent '$ format = <<< FORMAT

FORMAT, 'je l'ai enlevé la code offensant et il sort maintenant avec un ID et fonctionne comme prévu. Je ne sais pas d'où vient ce code (je ne suis pas le développeur original) mais je pense que cela devrait résoudre mes problèmes. – uberweb

0

Je ne suis pas au courant de la façon dont fonctionne Symfony. En PHP/HTML, la valeur de la case à cocher est indépendante de si elle est cochée ou non cochée. Si une case est cochée, sa valeur sera envoyée dans le formulaire; s'il n'est pas coché, il ne sera pas soumis.

0

Essayez de changer votre type de données pour tinyint.

valid: { phpName: Valid, type: TINYINT, size: '4', required: false } 

Voici une case à cocher avec une valeur par défaut et une étiquette.

$this->setWidgets(array(
'valid' => new sfWidgetFormInputCheckbox(array('label'=>'My Label') , array('value' => '1'));