Symfony2:根据另一个字段值

时间:2017-08-18 16:30:20

标签: php forms symfony

我正在使用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的版本。我也无法升级版本,至少现在还没有。

1 个答案:

答案 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'),
));

Equivalent Symfony 2.7:

$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,
));

Equivalent in Symfony 3.0:

$builder->add('genre', 'choice', array(
    'choices' => array('Male' => 'm', 'Female' => 'f'),
    'choices_as_values' => true,
));