有没有一种方法可以使表单类型容器知道?
例如,我有3个实体Account,User和Event。用户具有ManyToMany关系,以便将许多用户与许多其他用户(称为批准者)相关联,其原因是这样,用户创建的事件可以具有能够批准该事件的用户列表。在我有一个批准人多个选择字段的用户编辑表单中,该列表需要按帐户进行过滤,因此我需要我的表单类型具有容器意识,以便按帐户ID过滤可用用户列表。
我认为对表单类型容器进行感知是正确的方法吗?我想使用实体管理器按帐户过滤用户列表。
1 通过构造器注入实体管理器
<?php
namespace Acme\YourBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Doctrine\ORM\EntityManager;
class YourType extends AbstractType
{
/**
* The entity manager
*
* @var EntityManager
*/
private $entityManager;
/**
* @param EntityManager
*/
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
//build your form here
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\YourBundle\Entity\YourEntity',
));
}
public function getName()
{
return 'name_of_your_form';
}
}
2 声明为服务
services:
# Form type
acme_your_bundle.name_of_your_form.form.type:
class: Acme\YourBundle\Form\Type\YourType
arguments:
entityManager: "@doctrine.orm.entity_manager"
如果您从Symfony开始,请遵循以下建议:
仔细查看FOSMessageBundle的代码,它将为您提供在symfony中进行任何操作的确切信息,从表单模型到表单工厂,再到特殊服务的创建(如作曲家,授权者等)。您学习的越多,学习symfony的速度就越快,我保证您100%。最后,在您的特定情况下,请查看此捆绑软件中的FormFactory
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句