Symfony2 - 在使用CRUD生成的表单中使用已记录的用户

时间:2012-11-29 10:14:36

标签: symfony symfony-2.1

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

  • 第一个叫做文章包含一个包含博客文章的列表:title, 文本,日期和用户,用户是帖子的作者。
  • 第二个是用户,实际上是用户提供商。包含名称,电子邮件,

我用以下内容生成文章实体的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(),
    ));
}

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

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

1 个答案:

答案 0 :(得分: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字段。