如何从Symfony中的其他实体获取选择选项

如何从Symfony中的其他实体获取选择选项

问题描述:

我想加载两个选择列表,第二个加载仅基于第一个选择的一些值。但是我的问题首先出现......如何从与当前类(表单类类)不直接相关的类中加载第一个列表中的EntityType值。如何从Symfony中的其他实体获取选择选项

->add(
    'cliente', 
    EntityType::class, 
    array(
     'class' => 'AppBundle:Cliente', 
     'choice_label' => 'nombre', 
    ) 
) 

但没有一个人cliente“在这个领域的实体,所以它抛出,你知道的消息......

无论属性“cliente”,也不是方法“getCliente一个( )“ ”cliente()“,”isCliente()“,”hasCliente()“,”__get()“存在并且在类”AppBundle \ Entity \ Envio“中拥有公共访问权限。

请问,你知道如何解决这个问题吗?欢迎任何帮助!

+0

'mapped'=>'false'? – abdiel

+0

它的工作原理!你知道如何添加一个事件监听器吗?我试图访问这个映射字段,但它不会出现在数据或表单中(event-> getData或event-> getForm)。我想这一点: $ builder-> GET( 'cliente') - >的addEventListener( FormEvents :: POST_SET_DATA, 功能(FormEvent $事件){$ 形成= $事件 - > getForm(); $数据= $事件 - >的getData(); 转储($形式); .... – jmunozco

+0

我张贴了错误的答案检查获得非映射字段的方式,并试图 – abdiel

根据你的错误,你的表单是Envio的实体。如果你想创建一个基于Cliente实体的EntityType选择列表,你需要一个学说的关系在你的Envio类:

class Envio 
{ 
    /* 
     * @ORM\ManyToOne(targetEntity="Cliente") 
     */ 
    protected $cliente; 

错误没有关系,你的问题关于有2个choicelists和改变的选择您的第二个列表基于第一个选择。您可能最好使用JavaScript,因此您将有许多选择,从AJAX到限制动态选择取决于值或innerText。

+0

对不起,我没这个关系是Envio - Tarifa - Cliente之间的关系,所以Envio和Tarifa实体是相关的,但不是直接的。我想要做的是选择Cliente,然后只加载它们(选择Cliente的)Tarifa选项。 – jmunozco

+0

但是,如果我明白correctl您是否希望Envio实体最终拥有选定的客户端?这似乎是你在表格中所做的。要用Symfony/Doctrine做到这一点,至少需要我在我的答案中描述的关系。使用这个ManyToOne和 - > add('cliente')在你的表单中,你将得到至少一个完整的客户列表。然后,您可以使用javascript更改基于'tarifa'的前一个选择的完整列表。 –

+0

不,Envio实体没有客户端,它有一个tarifa(票价),并且tarifa属于客户端。所以客户与Envio实体没有直接关系。我发现这个http://*.com/questions/10186185/symfony2-chained-selectors,我现在正在尝试...希望它的作品... – jmunozco

对于您需要现场为错误“映射” =>假,所以:

->add(
    'cliente', 
    EntityType::class, 
    array(
     'class' => 'AppBundle:Cliente', 
     'choice_label' => 'nombre', 
     'mapped' => false 
    ) 
) 

然后用于获取财产的控制器,你必须做到:

$cliente = $form->get('cliente')->getData(); 

希望这对你有帮助。

+0

我需要获得EnvioType类中的客户端。当'cliente'字段发生变化时,它必须触发一个事件来加载下一个输入选项...你知道如何从addEventListener函数中的EnvioType类访问该字段吗?谢谢! – jmunozco