Symfony1 创建接受空值的布尔表单小部件

Symfony1 创建接受空值的布尔表单小部件,symfony1,widget,symfony-1.4,propel,symfony-forms,Symfony1,Widget,Symfony 1.4,Propel,Symfony Forms,我的Symfony模型有一个布尔字段,但也接受NULL,因此有效地是一个三态值 我如何为它编写一个小部件?Symfony自动生成一个sfWidgetFormCheckbox,但是 不能设置为空 我尝试使用sfWidgetFormChoice,但我必须将值指定为字符串以使其正常工作: $this->setWidget('wt', new sfWidgetFormChoice(array( 'choices' => array(true => 'true', false =

我的Symfony模型有一个布尔字段,但也接受NULL,因此有效地是一个三态值

我如何为它编写一个小部件?Symfony自动生成一个sfWidgetFormCheckbox,但是 不能设置为空

我尝试使用sfWidgetFormChoice,但我必须将值指定为字符串以使其正常工作:

$this->setWidget('wt', new sfWidgetFormChoice(array(
    'choices' => array(true => 'true', false => 'false', null => 'null')
)));
它用于存储值,但每当我保存假值时,select就会跳回“null”。我尝试了“false”、“0”等多种组合,但在这三种情况下都没有效果

有什么想法吗?

下面是一个例子:

下面是一个例子:

您是否尝试过“null”=>“null”并创建一个查找字符串null并返回正确值的自定义验证程序?您是否尝试过“null”=>“null”并创建一个查找字符串null并返回正确值的自定义验证程序?
class sfWidgetFormTrilean extends sfWidgetForm
{
  public function configure($options = array(), $attributes = array())
  {

    $this->addOption('choices', array(
      0 => 'No',
      1 => 'Yes',
      'null' => 'Null'
    ));
  }

  public function render($name, $value = null, $attributes = array(), $errors = array())
  {
    $value = $value === null ? 'null' : $value;

    $options = array();
    foreach ($this->getOption('choices') as $key => $option)
    {
      $attributes = array('value' => self::escapeOnce($key));
      if ($key == $value)
      {
        $attributes['selected'] = 'selected';
      }

      $options[] = $this->renderContentTag(
        'option',
        self::escapeOnce($option),
        $attributes
      );
    }

    return $this->renderContentTag(
      'select',
      "\n".implode("\n", $options)."\n",
      array_merge(array('name' => $name), $attributes
    ));
  }
}