0
new sfWidgetFormSelectRadio(
                array('choices' => $images)));

上記は、各オプションを次のようにレンダリングします。

<input type="radio" name="name" value="image_path">

最小限のコードでこのようにレンダリングする方法:

<input type="radio" name="name" value="image_path"><img src="image_path" />
4

1 に答える 1

2

これはテストされておらず、そのウィジェットのSymfonyAPIドキュメントを読んでいる私から直接です。クラスを拡張し、のsfWidgetFormSelectRadioように呼び出して、プロジェクトmyWidgetFormSelectRadioに貼り付ける必要がありlib/widget/myWidgetFormSelectRadio.class.phpます。

formatChoices()次のようにメソッドをオーバーライドします。

class myWidgetFormSelectRadio extends sfWidgetFormSelectRadio
{
  protected function formatChoices($name, $value, $choices, $attributes)
  {
    $inputs = array();
    foreach ($choices as $key => $option)
    {
      $baseAttributes = array(
        'name'  => substr($name, 0, -2),
        'type'  => 'radio',
        'value' => self::escapeOnce($key),
        'id'    => $id = $this->generateId($name, self::escapeOnce($key)),
      );

      if (strval($key) == strval($value === false ? 0 : $value))
      {
        $baseAttributes['checked'] = 'checked';
      }

      $inputs[$id] = array(
        'input' =>
          $this->renderTag('input', array_merge($baseAttributes, $attributes))
          . $this->renderTag('img', array('src' => self::escapeOnce($key))),
        'label' => $this->renderContentTag('label', self::escapeOnce($option), array('for' => $id)),
      );
    }

    return call_user_func($this->getOption('formatter'), $this, $inputs);
  }
}

つまり、基本的にはimgタグを入力に追加することになります。

フォームのメソッドで、新しいウィジェットを使用するために使用configure()から使用に切り替える必要があります。sfWidgetFormSelectRadiomyWidgetFormSelectRadio

これが機能するかどうか教えてください;-)

于 2010-03-01T17:32:49.887 に答える