在Symfony 2表单上找不到实体

时间:2014-06-13 10:05:25

标签: php symfony doctrine-orm symfony-2.3

我使用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

1 个答案:

答案 0 :(得分:0)

尝试在FormType中为data_class添加反斜杠前缀:

'data_class' => '\Project\Bundle\ProjectBundle\Entity\Poi',

感谢this post