我的Symfony模型有一个布尔值但也接受NULL的字段,所以有效的是三态值。
如何为此编写小部件? Symfony自动生成一个sfWidgetFormCheckbox但是 不能设置为NULL。
我尝试了一个sfWidgetFormChoice,但是我必须将值指定为字符串才能使它们工作:
$this->setWidget('wt', new sfWidgetFormChoice(array(
'choices' => array(true => 'true', false => 'false', null => 'null')
)));
它适用于存储值,但每当我保存“false”值时,select会跳回“null”。我尝试了几种“假”,“0”,“等等的组合,但在所有三种情况下都没有任何效果。
有什么想法吗?
答案 0 :(得分:4)
docs:
的一个例子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
));
}
}