如何从Symfony2中的抽象类中获取学说?

时间:2015-01-25 20:46:46

标签: symfony doctrine-orm doctrine symfony-2.3

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

我尝试创建新服务,但它没有用(我想我不能在这种情况下使用__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()原则?

1 个答案:

答案 0 :(得分:1)

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

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

这样的东西