如何从 Symfony2 中的摘要 class 中获取学说?

How to get doctrine from abstract class in Symfony2?

在我的代码中,我需要从数据库下载一些数据并将其放入表单,但我不知道如何在 Controller 之外获取 doctrone class。

我尝试创建新服务,但没有成功(我想我不能在这种情况下使用 __controller(),对吗?)。我也尝试将控制器的实例传输到 buildForm() 方法的参数,但我收到消息:FatalErrorException: Compile Error: Declaration of MyBundle\Form\Type\TemplateType::buildForm() must be compatible with that of Symfony\Component\Form\FormTypeInterface::buildForm())。

这是我的代码:

class TemplateType extends AbstractType {
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
            ->add('name', 'text')
            // ...
            ->add('description', 'textarea');
    }
    public function getName() {
        return 'template';
    }
}

如何在 buildForm() 内部使用学说?

为了将数据从学说发送到您的表单,您需要在您的控制器中执行此操作:

public function doSomethingWithOneObjectAction( $id )
{
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository( 'AcmeBundle:ObjectEntity' )->find( $id );

    if ( ! $entity) {
        throw $this->createNotFoundException( 'Unable to find Object entity.' );
    }

    $form = $this->createForm(
        new TemplateType(),
        $entity
    );

    return array(
        'entity' => $entity,
        'form'   => $form->createView()
    );
}

如果要从表单类型中的容器访问服务,首先需要将其注册为服务并向其中注入所需的服务。类似于 this