2012-04-26 67 views
3

我有一个symfony 1.4应用程序,并且使用sfWidgetFormChoice来创建多个复选框。如何在编辑对象时选择多个symfony复选框

我可以在没有问题的情况下设置默认值,但是在保存对象并查看编辑表单后,我无法获取要复选的复选框。

“checked”复选框的值被分解并保存到单个字段中。

例如:

Default checkbox setup

这是默认设置。 这保存到数据库中作为Full-Time;Hourly。 这很好。

当我编辑这个对象,形式是这样的:

Edit checkbox setup

编辑对象时,setDefault功能不起作用(因为有“数据”在那里,所以我们不” t需要默认)。

我是如何创建的领域对象:

$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')); 

如何设置相应的复选框来编辑对象时进行检查?

回答

2

sfWidgetFormChoice::render()预计$ value参数是一个数组。所以我认为有两种方法可以实现你想要的功能:

创建一个从sfWidgetFormChoice继承的新Widget类。只有实现渲染方法:


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

或者你可以调整渲染方法的调用者或您的模型,以便sfWidgetFormChoice ::渲染()被调用$值作为数组(把爆炸别的地方)。

+0

太棒了!像魅力一样工作。顺便说一句,你的答案的代码有一个小错误,'parent :: render()'有两个渲染 – Patrick 2012-04-27 04:53:18

+0

哎呀,没有测试代码:) – Intru 2012-04-27 08:15:40