繁体   English   中英

Symfony2-以CRUD生成的形式使用登录的用户

[英]Symfony2 - Using logged user in a form generated with CRUD

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

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

我通过以下方式生成商品实体的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实体的用户的框,因此我可以选择其中一个,因为这两个表都在Entity中链接了ManyToOne批注。 但是,我不想选择任何用户。 我想在Articles表中输入已经登录的用户名(实际上是ID,因为它们都是链接的),并删除可用用户的列表。

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

首先,如果您仍在学习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字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM