我正在使用Symfony 2.3
我有一个表单,用户在其中选择州和城市(都有下拉列表)。
它按预期工作,但我会根据用户选择的状态显示城市。基本上表单的工作原理如下:
第1页:用户选择州
第2页:用户选择一个城市 (此时,状态字段已锁定,无法更改。用户只能更改城市)
那么如何从数据库中获取State值,然后在第2页上使用它来仅显示该状态的城市,而不使用Ajax。
州表:
->add('state', 'entity', array(
"label" => 'Name of the state(*): ',
'class' => 'PrincipalBundle:State',
"attr" => array('class' => 'control-group', 'style' => 'width: 50%', 'rows' => '1'),
"property"=>"statename"))
以下是城市形式:
->add('city', 'entity', array(
"label" => 'City Name (*): ',
'class' => 'PrincipalBundle:Cities',
"attr" => array('class' => 'control-group', 'style' => 'width: 50%', 'rows' => '1'),
"property"=>"cityname"))
我无法使用事件监听器。我试图按照文档,但我收到了这个错误:
' choices_as_values'未声明
我认为这是由于Symfony的版本。我也无法升级版本,至少现在还没有。
答案 0 :(得分:1)
你绝对可以使用事件监听器。您似乎唯一的错误就是choices_as_values
。那是introduced in 2.7来模仿choices
以前的工作方式。 In Symfony 2.7 the keys/values flipped了解choices
数组的工作原理,因此他们添加了choices_as_values
以实现向后兼容性(您将其设置为true
以便以旧方式运行。)
您需要做的就是删除choices_as_values
设置,您应该好好去。只需确保键是项目值,值应显示给用户。
<强> In Symfony 2.3: 强>
$builder->add('gender', 'choice', array(
'choices' => array('m' => 'Male', 'f' => 'Female'),
));
$builder->add('genre', 'choice', array(
'choices' => array('m' => 'Male', 'f' => 'Female'),
'choices_as_values' => false,
));
在Symfony 2.7中也相同:
$builder->add('genre', 'choice', array(
'choices' => array('Male' => 'm', 'Female' => 'f'),
'choices_as_values' => true,
));
$builder->add('genre', 'choice', array(
'choices' => array('Male' => 'm', 'Female' => 'f'),
'choices_as_values' => true,
));