我自己创建了 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
.
看起来很有趣的 ClassEntityManager50ecb6f979a07_546a8d27f194334ee012bfe64f629947b07e4919\__CG__\Doctrine\ORM\EntityManager
是一个 Doctrine2 代理类。
从 Symfony 2.1 开始,调用$this->getDoctrine()->getEntityManager()
no longer 会产生Doctrine\ORM\EntityManager
一个代理类,它的行为实际上与原始类一样EntityManager
,可以毫无问题地传递。