我使用smyfony2 cli工具生成了一个实体的CRUD。现在我想使用CRUD中的编辑功能。
首先是代码
/**
* Displays a form to edit an existing Poi entity.
*
* @Route("/poi/{id}/edit", name="poi_edit", requirements={"id" = "\d+"})
* @Method("GET")
* @Template()
*/
public function editAction($id){
$em = $this->getDoctrine()->getManager('default')->getRepository('Project\Bundle\ProjectBundle\Entity\Poi');
$entity = $em->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Poi entity.');
}
$editForm = $this->createEditForm($entity);
return array(
'entity' => $entity,
'edit_form' => $editForm->createView()
);
}
/**
* Creates a form to edit a Poi entity.
*
* @param Poi $entity The entity
*
* @return \Symfony\Component\Form\Form The form
*/
private function createEditForm(Poi $entity)
{
$form = $this->createForm(new PoiType(), $entity, array(
'action' => $this->generateUrl('poi_update', array('id' => $entity->getId())),
'method' => 'PUT',
));
$form->add('submit', 'submit', array('label' => 'Update'));
return $form;
}
但我收到“未找到实体”错误。当然我首先考虑的是NotFoundException
的投掷,所以我评论了它,但我仍然得到错误。
然后我调试了代码,找到了实体。它也存在于数据库中。
我进一步调试并发现错误在Symfony2 Form堆栈中的某处生成,该堆栈生成表单,该表单在createEditForm
操作中调用。
我的Symfony2开发日志也只是说抛出了NotFoundException
,没有找到进一步的信息。
我有另一个生成CRUD的实体,但我自己在createEditForm
中构建了表单,因为某些字段不应该显示。我需要自己创建表单还是我做了一些明显错误的事情?
还有PoiType代码
class PoiType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('date')
->add('situation')
->add('description')
->add('isPrivate')
->add('image')
->add('audio')
->add('country')
->add('category')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Project\Bundle\ProjectBundle\Entity\Poi'
));
}
/**
* @return string
*/
public function getName()
{
return 'project_bundle_projectbundle_poi';
}
}
这是我得到的错误:
CRITICAL - Uncaught PHP Exception Doctrine\ORM\EntityNotFoundException: "Entity was not found." at /var/www/project-symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Proxy/ProxyFactory.php line 177
答案 0 :(得分:0)
尝试在FormType中为data_class
添加反斜杠前缀:
'data_class' => '\Project\Bundle\ProjectBundle\Entity\Poi',
感谢this post。