2012-04-26 65 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