将每个选项渲染为Symfony选择小部件中的表中的一行

时间:2010-06-12 00:03:29

标签: forms symfony-1.4

我有一个sfWidgetFormChoice,它在Symfony 1.4中呈现复选框。我遇到的问题是我想将每个选项作为表中的一行进行处理。所以我的html理想情况是这样的:

<tr><td>Choice 1</td></tr>
<tr><td>Choice 1</td></tr>
<tr><td>Choice 1</td></tr>
            .
            .
            .

因此它将呈现为表而不是列表。

谢谢!

1 个答案:

答案 0 :(得分:2)

在名为MyForm的表单中,创建以下小部件:

$this->widgetSchema ['my_widget'] = new sfWidgetFormChoice(array('multiple' => true, 'expanded' => true, 'choices' => my_choices, 'renderer_class' => 'sfWidgetFormSelectCheckbox', 'renderer_options' => array('formatter' => array('MyForm', 'MyFormatter'))));

$this->validatorSchema ['my_widget'] = new sfValidatorChoice(array('multiple' => true, 'choices' => array_keys(my_choices), 'required' => false));

然后添加以下名为MyFormatter的格式化程序方法:

public static function MyFormatter($widget, $inputs) {
       $result = '<table>';
       foreach ($inputs as $input) {
          $result .= '<tr><td>' . $input ['label'] . '   ' . $input ['input'] . '</td></tr>';
        }
        $result .= '</table>';
        return $result;
}

我通过在小部件定义中将renderer_class选项设置为sfWidgetFormSelectCheckbox来使用sfWidgetFormSelectRadio将选项呈现为复选框,您可以使用array('formatter' => array('MyForm', 'MyFormatter'))将其呈现为单选按钮,然后您可以调用其他格式化程序另一种形式是改变{{1}}。