それが最善の方法であるかどうかについてコメントすることはできませんが、私は常にそれらをハード依存関係としてタスク コンストラクターに渡してきました...
サービス
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 の複雑なフォーム構成に頼るよりも、何が起こっているのか、カスタム クラスが何を必要としているのかをより明確に理解していると思います。