2

我想以这种方式呈现 symfony 表单:

带有单选按钮的表单

我的问题与单选按钮小部件有关:我不知道如何单独呈现每个选择,以便在这些单选按钮之间显示其他字段。

有没有办法用 symfony 形式实现这一点?

谢谢!

4

3 回答 3

5

Symfony 使这有点难以做到。您想要一个renderChoice( $value)可从视图调用的方法,但这需要更改或扩展 sfFormField。

更改它不是未来的证明,扩展它还需要您更改一些 symfony 变量,以便您视图中可访问的字段是这个新类的实例。我不知道该选项是否存在。

相反,我选择将 sfWidgetFormSelectRadio 扩展为以下非常简单的扩展类formatChoices。它将检查您是否只要求一个选项。如果是,它会呈现该标签并返回它,否则它会通过parent::.

这使您可以从视图中调用:您要呈现的单选选项的索引在$form['field']->render(array('only_choice'=> $value))
哪里:$value

<?php

/**
 * sfWidgetFormSelectRadioSingleable lets you render just one option at a time.
 *
 * @package    symfony
 * @subpackage widget
 * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
 * @version    SVN: $Id: sfWidgetFormSelectRadio.class.php 27738 2010-02-08 15:07:33Z Kris.Wallsmith $
 */
class sfWidgetFormSelectRadioSingleable extends sfWidgetFormSelectRadio
{
  public function formatChoices($name, $value, $choices, $attributes)
  {
    $onlyChoice = (!empty($attributes['only_choice'])) ? $attributes['only_choice'] : false; unset($attributes['only_choice']);

    if($onlyChoice)
    {
      if(!isset($choices[$onlyChoice]))
          throw new Exception("Option '$onlyChoice' doesn't exist.");

      $key    = $onlyChoice;
      $option = $choices[$key];
      $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';
      }

      return $this->renderTag('input', array_merge($baseAttributes, $attributes));
    }
    else
    {
      return parent::formatChoices($name, $value, $choices, $attributes);
    }
  }
}

笨拙的代码,但在实践中很容易使用,并且将来不会中断。

于 2011-06-24T22:58:41.350 回答
1

标准小部件不允许您在一个字段的元素之间注入另一个字段;看看sfWidgetFormSelectRadio::formatChoices()为什么会这样。我的第一反应是扩展 sfWidgetFormSelectRadio,包括一个renderChoice( $value )方法。

于 2011-03-03T16:41:09.333 回答
0

如何定义sfWidgetFormSelectRadio具有相同名称和不同值的单独小部件?

于 2011-03-03T04:06:23.920 回答