3

symfony 1.4アプリケーションがあり、sfWidgetFormChoice複数のチェックボックスを作成するために使用しているフォームがあります。

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

「チェック済み」チェックボックスの値は、1つのフィールドに反映されて保存されます。

例えば:

デフォルトのチェックボックス設定

これがデフォルトの設定です。これにより、データベースにとして保存されますFull-Time;Hourly。それはうまくいきます。

このオブジェクトを編集しているとき、フォームは次のようになります。

チェックボックスの設定を編集する

オブジェクトを編集するとき、この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'));

オブジェクトを編集するときにチェックする適切なチェックボックスを設定するにはどうすればよいですか?

4

1 に答える 1

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);
}

または、renderメソッドまたはモデルの呼び出し元を調整して、sfWidgetFormChoice :: render()が$ valueを配列として呼び出されるようにすることもできます(展開を別の場所に配置します)。

于 2012-04-26T14:29:16.053 に答える