2012-04-26 7 views
3

私はsymfony 1.4アプリケーションを持っていて、フォームに複数のチェックボックスを作成するためにsfWidgetFormChoiceを使用しています。オブジェクトを編集するときに複数のsymfonyチェックボックスを選択する方法

私は問題なくデフォルトを設定できますが、オブジェクトを保存して編集フォームを表示した後、チェックボックスをチェックすることができません。

'チェックされた'チェックボックスの値は、爆縮されて1つのフィールドに保存されます。例えば

Default checkbox setup

これはデフォルトの設定です。 これにより、データベースにFull-Time;Hourlyという名前で保存されます。 それは素晴らしい作品です。

私は、このオブジェクトを編集していた場合、フォームは次のようになります。「オブジェクトを編集する際のデータは、 "そこにあるのでsetDefault関数は(動作しませんので、私たちはドン

Edit checkbox setup

デフォルトは必要ありません)。

どのように私はフィールドオブジェクトを作成しています:

$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引数が配列であると想定しています。だから私はあなたが望むものを達成するための2つの方法があると思う:

sfWidgetFormChoiceから継承する新しいWidgetクラスを作成する。唯一のrenderメソッドを実装:()配列として$の値で呼び出されます


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

するか、sfWidgetFormChoiceは::レンダリングするようにあなたはrenderメソッドの呼び出し元やモデルを調整することができます(爆発どこか別の場所に置きます)。

+0

恐ろしい!魅力的に働いた。ところで、答えのコードに小さな誤りがあり、 'parent :: render()'に2つのレンダリングがあります – Patrick

+0

おっと、コードをテストしていません:) – Intru

関連する問題