如何从Symfony中的其他实体获取选择选项
我想加载两个选择列表,第二个加载仅基于第一个选择的一些值。但是我的问题首先出现......如何从与当前类(表单类类)不直接相关的类中加载第一个列表中的EntityType值。如何从Symfony中的其他实体获取选择选项
->add(
'cliente',
EntityType::class,
array(
'class' => 'AppBundle:Cliente',
'choice_label' => 'nombre',
)
)
但没有一个人cliente“在这个领域的实体,所以它抛出,你知道的消息......
无论属性“cliente”,也不是方法“getCliente一个( )“ ”cliente()“,”isCliente()“,”hasCliente()“,”__get()“存在并且在类”AppBundle \ Entity \ Envio“中拥有公共访问权限。
请问,你知道如何解决这个问题吗?欢迎任何帮助!
根据你的错误,你的表单是Envio的实体。如果你想创建一个基于Cliente实体的EntityType选择列表,你需要一个学说的关系在你的Envio类:
class Envio
{
/*
* @ORM\ManyToOne(targetEntity="Cliente")
*/
protected $cliente;
错误没有关系,你的问题关于有2个choicelists和改变的选择您的第二个列表基于第一个选择。您可能最好使用JavaScript,因此您将有许多选择,从AJAX到限制动态选择取决于值或innerText。
对不起,我没这个关系是Envio - Tarifa - Cliente之间的关系,所以Envio和Tarifa实体是相关的,但不是直接的。我想要做的是选择Cliente,然后只加载它们(选择Cliente的)Tarifa选项。 – jmunozco
但是,如果我明白correctl您是否希望Envio实体最终拥有选定的客户端?这似乎是你在表格中所做的。要用Symfony/Doctrine做到这一点,至少需要我在我的答案中描述的关系。使用这个ManyToOne和 - > add('cliente')在你的表单中,你将得到至少一个完整的客户列表。然后,您可以使用javascript更改基于'tarifa'的前一个选择的完整列表。 –
不,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();
希望这对你有帮助。
我需要获得EnvioType类中的客户端。当'cliente'字段发生变化时,它必须触发一个事件来加载下一个输入选项...你知道如何从addEventListener函数中的EnvioType类访问该字段吗?谢谢! – jmunozco
'mapped'=>'false'? – abdiel
它的工作原理!你知道如何添加一个事件监听器吗?我试图访问这个映射字段,但它不会出现在数据或表单中(event-> getData或event-> getForm)。我想这一点: $ builder-> GET( 'cliente') - >的addEventListener( FormEvents :: POST_SET_DATA, 功能(FormEvent $事件){$ 形成= $事件 - > getForm(); $数据= $事件 - >的getData(); 转储($形式); .... – jmunozco
我张贴了错误的答案检查获得非映射字段的方式,并试图 – abdiel