如果未在表单中设置,则为窗口小部件设置默认值(PHP Symfony)

时间:2013-04-26 20:48:36

标签: php forms widget symfony-1.4 symfony-forms

我正在使用Symfony PHP。 我有一个复选框,根据它是否检查,我想在表单中显示一个组合框。如果选中该复选框,我想显示包含所有选项的组合,但如果未选中,则我想禁用组合,但是在保存表单时,窗口小部件必须具有默认值或硬编码值。我不知道该怎么做,因为当我禁用组合框时,表单将小部件保存为空,我无法设置预定义的值。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您可以在bind()方法中更改表单的提交数据。如果您想根据用户选择/提交的内容更改表单的行为,请使用此选项。

如果要在表单数据经过验证并准备好持久保存到数据库后更改对象的更改方式,请查看updateObject()方法。

class myForm
{
    public function configure()
    {
        // configuration
    }    

    public function bind($taintedValues = array(), $taintedFiles = array())
    {
        // I can alter the behaviour of the form here, depending on the data submitted
        if (isset($taintedValues['do_not_store_my_personal_details'])) {
            // Change the value of a form field. If the form doesn't pass validation, the user will see any information entered into the phone_number fields has been deleted
            $taintedValues['phone_number'] = null;
        }

        return parent::bind($taintedValues, $taintedFiles);
    }

    public function updateObject($values = null)
    {
        if ($values === null) {
            $values = $this->getValues();
        }

        // Override the data stored with the object
        if ($values['do_not_store_my_personal_details'] == true) {
            $values['phone_number'] = null;
        }

        return parent::updateObject($values);
}