如何在编辑对象时选择多个symfony复选框

时间:2012-04-26 13:35:25

标签: forms symfony1 symfony-1.4 symfony-forms

我有一个symfony 1.4应用程序,并且我使用sfWidgetFormChoice形式创建了多个复选框。

我可以毫无问题地设置默认设置,但在保存对象并查看编辑表单后,我无法检查复选框。

“已检查”复选框中的值会被内爆并保存到单个字段中。

例如:

Default checkbox setup

这是默认设置。 这将Full-Time;Hourly保存到数据库中。 这很有效。

当我编辑此对象时,表单如下所示:

Edit checkbox setup

编辑对象时setDefault函数不起作用(因为那里有'数据',所以我们不需要默认值)。

我是如何创建字段对象的:

$choices    = array(
    'Full-Time' => 'Full-Time',
    'Part-Time' => 'Part-Time',
    'Hourly'    => 'Hourly',
    'Contract'  => 'Contract'
);

$this->widgetSchema['emp_type'] = new sfWidgetFormChoice(
    array(
        'choices'   => $choices, 
        'multiple'  => true, 
        'expanded'  => true
        ),
    array()
);

$this->setDefault('emp_type', array('Full-Time', 'Hourly'));

如何在编辑对象时设置要检查的相应复选框?

1 个答案:

答案 0 :(得分:2)

sfWidgetFormChoice::render()期望$ value参数是一个数组。所以我认为有两种方法可以达到你想要的效果:

创建一个继承自sfWidgetFormChoice的新Widget类。只实现render方法:

  
public function render($name, $value = null, $attributes = array(), $errors = array())    {
  $value = explode(';', $value);
  return parent::render($name, $value, $attributes, $errors);
}

或者您可以调整渲染方法或模型的调用者,以便使用$ value作为数组调用sfWidgetFormChoice :: render()(将爆炸放在其他地方)。