在我的代码中,我需要从数据库中下载一些数据并将其放到表单中,但我不知道如何在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()原则?
答案 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
这样的东西