我可以$this->createForm(new EntityType(), $entity, array('em' => $em))从控制器做,但我怎么能把它传递给NestedEntityType()?我想我不能只是从里面传递它EntityType->buildForm():
public function buildForm(FormBuilderInterface $builder, array $options)
{
$entityManager = $options['em'];
$builder->add('entities', 'collection', array(
'type' => new NestedEntityType(),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false
));
}
Run Code Online (Sandbox Code Playgroud)
我需要实体管理器来设置数据转换器以检查数据库中是否已存在实体,并在关系中使用该实体而不是创建具有相同名称的新实体.
资源
您可以将表单定义为服务,然后将Doctrine实体管理器作为参数注入其中.
http://symfony.com/doc/3.4/form/form_dependencies.html
然后像这样声明服务:
services:
acme.type.employee:
class: Acme\AcmeBundle\Form\Type\FormType
tags:
- { name: form.type, alias: form_em }
arguments: [@doctrine]
Run Code Online (Sandbox Code Playgroud)
并在表单类型:
use Doctrine\Bundle\DoctrineBundle\Registry as Doctrine;
/** @var \Doctrine\ORM\EntityManager */
private $em;
/**
* Constructor
*
* @param Doctrine $doctrine
*/
public function __construct(Doctrine $doctrine)
{
$this->em = $doctrine->getManager();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用options将相应的数据传递给子类型:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$entityManager = $options['em'];
$builder->add('entities', 'collection', array(
'type' => new NestedEntityType(),
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false
'options' => array('em' => $entityManager) // <-- THIS
));
}
Run Code Online (Sandbox Code Playgroud)
另外,@约翰在书中的解决方案,所以值得花时间去做他提出的建议.我的解决方案更适合传递中间控制器的数据(不是服务)
| 归档时间: |
|
| 查看次数: |
8692 次 |
| 最近记录: |