FormType を自分で作成しました。これはうまくいくはずです:
<?php
// Baza\BlogBundle\Form\filterType.php
namespace Baza\BlogBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Doctrine\ORM\EntityManager;
class filterType extends AbstractType
{
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
// Do something with your Entity Manager using "$this->em"
}
public function getName()
{
return 'filter_type';
}
}
コントローラーで次のようなものを使用します
<?php
// Baza\BlogBundle\Controller\PageController.php
namespace Baza\BlogBundle\Controller;
use Baza\BlogBundle\Form\filterType;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class BaseController extends Controller
{
public function testEntityManager()
{
// assign whatever you need
$enquiry = null;
// getEntityManager() is depricated. Use getManager() instead.
$em = $this->getDoctrine()->getManager();
$this->createForm(
new filterType($em),
$enquiry
);
}
}
使用しているすべてのクラスを含める/使用することを忘れないでください。それ以外の場合、PHP はクラスが現在使用されている名前空間内にあると想定します。
そのため、エラーが発生しました(Ceradの投稿で)
Catchable Fatal Error: Argument 1 passed to
Baza\BlogBundle\Form\filterType::__construct()
must be an instance of Baza\BlogBundle\Form\EntityManager [...]
EntityManager を含めなかったので、PHP はそれが現在の名前空間内のクラスであると想定しますBaza\BlogBundle\Form
。
おかしな見た目のクラスEntityManager50ecb6f979a07_546a8d27f194334ee012bfe64f629947b07e4919\__CG__\Doctrine\ORM\EntityManager
は Doctrine2 プロキシ クラスです。
Symfony 2.1 から、$this->getDoctrine()->getEntityManager()
lonoger を呼び出さないDoctrine\ORM\EntityManager
と、実際には元のクラスと同じように動作し、問題なく渡すことができるプロキシ クラスが生成されEntityManager
ます。