虽然我无法评论这是否是最好的方法,但我总是将它们作为硬依赖传递给我的任务构造函数......
服务
services:
my_bundle.form.type.task:
class: Company\MyBundle\Form\Type\TaskType
arguments:
- @doctrine.orm.entity_manager
控制器
$form = $this->createForm($this->get('my_bundle.form.type.task'), $task);
// or
$form = $this->createForm(new TaskType($this->getDoctrine()->getEntityManager()));
表格类型
namespace Company\MyBundle\Form\Type;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Form\AbstractType;
// ...
class TaskType extends AbstractType
{
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
// ...
}
只要我的表单类型有任何依赖关系,我就会使用容器来管理它们。我个人发现这种方法比依靠 Symfony 的复杂表单配置来为我做这件事更清楚发生了什么,以及我的自定义类需要什么。