Symfony 1.4、sfWidgetFormInputCheckbox 和 sfValidatorBoolean。选中复选框时值为 "on"
Symfony 1.4, sfWidgetFormInputCheckbox and sfValidatorBoolean. Value is "on" when checkbox is checked
开发人员大家好:)
我在使用旧的和已弃用的 Symfony 1.4 时遇到了一个非常奇怪的问题。
为了解释它 'quick & simple' 我有一个用 sfWidgetFormInputCheckbox()
制作的复选框和一个用 sfValidatorBoolean()
制作的小部件的验证器,这是在 Symfony 中执行此操作的常规工具。
但是当我选中复选框并提交时,值是 on
!!
不是 1
,不是 true
,而是 on
!!我不需要用 on off
值启动引擎 :)
不管怎样,我现在给出所有有用的代码,如果你找到了什么,请告诉我,因为它让我发疯!
这是我的 BaseHomeUserAcceptedCguForm.class.php
abstract class BaseHomeUserAcceptedCguForm extends BaseFormDoctrine
{
public function setup()
{
$this->setWidgets(array(
'id' => new sfWidgetFormInputHidden(),
'terms_of_use_acceptance' => new sfWidgetFormInputCheckbox(),
'letter_sort_id' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('LetterSort'), 'add_empty' => true)),
'home_user_id' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('HomeUser'), 'add_empty' => true)),
));
$this->setValidators(array(
'id' => new sfValidatorChoice(array('choices' => array($this->getObject()->get('id')), 'empty_value' => $this->getObject()->get('id'), 'required' => false)),
'terms_of_use_acceptance' => new sfValidatorBoolean(array('required' => false)),
'letter_sort_id' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('LetterSort'), 'required' => false)),
'home_user_id' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('HomeUser'), 'required' => false)),
));
$this->widgetSchema->setNameFormat('home_user_accepted_cgu[%s]');
$this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
$this->setupInheritance();
parent::setup();
}
public function getModelName()
{
return 'HomeUserAcceptedCgu';
}
}
我的HomeUserAcceptedCguForm.class.php
class HomeUserAcceptedCguForm extends BaseHomeUserAcceptedCguForm
{
public $fields = array(
'terms_of_use_acceptance',
'home_user_id',
'letter_sort_id'
);
public function configure()
{
parent::configure();
$this->widgetSchema['home_user_id'] = new sfWidgetFormInputHidden();
$this->widgetSchema['letter_sort_id'] = new sfWidgetFormInputHidden();
$this->validatorSchema['terms_of_use_acceptance'] = new sfValidatorBoolean(array('required' => true));
$this->validatorSchema['terms_of_use_acceptance']->setMessage('required', "Vous devez accepter les conditions d'utilisation du service pour effectuer cette prestation.");
}
}
action.class.php
中的部分代码
$this->newCGUForm = new HomeUserAcceptedCguForm();
$this->newCGUForm->getWidgetSchema()->setFormFormatterName('div');
$this->newCGUForm->setDefault('home_user_id', $home_user_id[0]["id"]);
$this->newCGUForm->setDefault('letter_sort_id', $letter_sort_id);
$this->newCGUForm->setDefault('terms_of_use_acceptance', false);
这是 firebug 在我提交表格时给我的。
home_user_accepted_cgu[home_user_id] 8193 //good value
home_user_accepted_cgu[letter_sort_id] 1022 //good value
home_user_accepted_cgu[terms_of_use_acceptance] on //the wrong value! Where is picking that 'on'??
我明确指出,在数据库中,字段 terms_of_use_acceptance
是一个 TINYIT,您可以在其中放置 1
或 0
(例如 true 或 false)。一切都与其他页面上的其他字段一起工作,TINYIT 像布尔值一样工作,但那个不起作用......希望我足够清楚。
P.S:答案 'Update to Symfony 2' 无效!我不能这样做,因为它不是个人项目。要是我,早就做好了!
好的,我有这些行进行验证。
if ($this->newCGUForm->isValid()) {
$this->newCGUForm->save();
}
我已经对此进行了更改,现在可以使用了。
if ($this->newCGUForm->isValid()) {
$this->newCGUForm->save();
$newCGU = $this->newCGUForm->getObject();
$newCGU->save();
}
开发人员大家好:)
我在使用旧的和已弃用的 Symfony 1.4 时遇到了一个非常奇怪的问题。
为了解释它 'quick & simple' 我有一个用 sfWidgetFormInputCheckbox()
制作的复选框和一个用 sfValidatorBoolean()
制作的小部件的验证器,这是在 Symfony 中执行此操作的常规工具。
但是当我选中复选框并提交时,值是 on
!!
不是 1
,不是 true
,而是 on
!!我不需要用 on off
值启动引擎 :)
不管怎样,我现在给出所有有用的代码,如果你找到了什么,请告诉我,因为它让我发疯!
这是我的 BaseHomeUserAcceptedCguForm.class.php
abstract class BaseHomeUserAcceptedCguForm extends BaseFormDoctrine
{
public function setup()
{
$this->setWidgets(array(
'id' => new sfWidgetFormInputHidden(),
'terms_of_use_acceptance' => new sfWidgetFormInputCheckbox(),
'letter_sort_id' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('LetterSort'), 'add_empty' => true)),
'home_user_id' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('HomeUser'), 'add_empty' => true)),
));
$this->setValidators(array(
'id' => new sfValidatorChoice(array('choices' => array($this->getObject()->get('id')), 'empty_value' => $this->getObject()->get('id'), 'required' => false)),
'terms_of_use_acceptance' => new sfValidatorBoolean(array('required' => false)),
'letter_sort_id' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('LetterSort'), 'required' => false)),
'home_user_id' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('HomeUser'), 'required' => false)),
));
$this->widgetSchema->setNameFormat('home_user_accepted_cgu[%s]');
$this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
$this->setupInheritance();
parent::setup();
}
public function getModelName()
{
return 'HomeUserAcceptedCgu';
}
}
我的HomeUserAcceptedCguForm.class.php
class HomeUserAcceptedCguForm extends BaseHomeUserAcceptedCguForm
{
public $fields = array(
'terms_of_use_acceptance',
'home_user_id',
'letter_sort_id'
);
public function configure()
{
parent::configure();
$this->widgetSchema['home_user_id'] = new sfWidgetFormInputHidden();
$this->widgetSchema['letter_sort_id'] = new sfWidgetFormInputHidden();
$this->validatorSchema['terms_of_use_acceptance'] = new sfValidatorBoolean(array('required' => true));
$this->validatorSchema['terms_of_use_acceptance']->setMessage('required', "Vous devez accepter les conditions d'utilisation du service pour effectuer cette prestation.");
}
}
action.class.php
中的部分代码
$this->newCGUForm = new HomeUserAcceptedCguForm();
$this->newCGUForm->getWidgetSchema()->setFormFormatterName('div');
$this->newCGUForm->setDefault('home_user_id', $home_user_id[0]["id"]);
$this->newCGUForm->setDefault('letter_sort_id', $letter_sort_id);
$this->newCGUForm->setDefault('terms_of_use_acceptance', false);
这是 firebug 在我提交表格时给我的。
home_user_accepted_cgu[home_user_id] 8193 //good value
home_user_accepted_cgu[letter_sort_id] 1022 //good value
home_user_accepted_cgu[terms_of_use_acceptance] on //the wrong value! Where is picking that 'on'??
我明确指出,在数据库中,字段 terms_of_use_acceptance
是一个 TINYIT,您可以在其中放置 1
或 0
(例如 true 或 false)。一切都与其他页面上的其他字段一起工作,TINYIT 像布尔值一样工作,但那个不起作用......希望我足够清楚。
P.S:答案 'Update to Symfony 2' 无效!我不能这样做,因为它不是个人项目。要是我,早就做好了!
好的,我有这些行进行验证。
if ($this->newCGUForm->isValid()) {
$this->newCGUForm->save();
}
我已经对此进行了更改,现在可以使用了。
if ($this->newCGUForm->isValid()) {
$this->newCGUForm->save();
$newCGU = $this->newCGUForm->getObject();
$newCGU->save();
}