2

我正在 Symfony2 中开发一个博客。我在教义中有两个实体:

  • 第一个称为文章包含博客文章的列表:标题、文本、日期和用户,其中用户是帖子的作者。
  • 第二个是用户,实际上是用户提供者。包含姓名、电子邮件
    等。

我使用以下命令生成 Article 实体的 CRUD:

php app/console doctrine:generate:crud

我在控制器文件中得到以下 updateAction:

public function updateAction(Request $request, $id)
{
    $em = $this->getDoctrine()->getManager();        
    $entity = $em->getRepository('BlogBundle:Staticpage')->find($id);

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

    $deleteForm = $this->createDeleteForm($id);
    $editForm = $this->createForm(new EditStaticPageType(), $entity);
    $editForm->bind($request);

    if ($editForm->isValid()) {

        $em->persist($entity);            
        $em->flush();

        return $this->redirect($this->generateUrl('static_edit', array('id' => $id)));
    }

    return $this->render('BlogBundle:StaticsManagement:edit.html.twig', array(
        'entity'      => $entity,
        'edit_form'   => $editForm->createView(),
    ));
}

当我打开表单以创建新文章或编辑现有文章时,会显示一个包含我的 User 实体的用户的框,因此我可以选择其中一个,因为这两个表在实体中使用 ManyToOne 注释链接。但是,我不想选择任何用户。我想在 Articles 表中写入已经登录的用户名(实际上是 ID,因为它们都是链接的),并删除可用用户的列表。

我已经设置了安全环境并且它可以正常工作,所以只有在用户登录时才会始终执行此代码。我想我必须编辑 updateAction 方法,但我不知道如何。

4

1 回答 1

1

首先,如果你还在学习 Symfony,我建议不要使用任何 CRUD 生成器。最好在第一次手动做事,而不是使用某种帮手。无论如何,如果我理解您的问题,您应该将当前登录的用户设置为文章用户:

// Get logged user and set it as article user
$loggedUser = $this->get('security.context')->getToken()->getUser();
$entity->setUser($loggedUser);

// Create edit form
$editForm = $this->createForm(new EditStaticPageType(), $entity);

// Bind the request if POST
if('POST' === $request->getMethod()) {
    $editForm->bind($request);
}

// GET or invalid POST form
if('GET' === $request->getMethod() || !$editForm->isValid()) {
    return $this->render('BlogBundle:StaticsManagement:edit.html.twig', array(
        'entity'      => $entity,
        'edit_form'   => $editForm->createView(),
    ));
}

// POST with valid form so persist
$em->persist($entity);            
$em->flush();

然后user从文章编辑表单中删除该字段。

于 2012-11-29T12:11:48.963 回答