我正在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(),
));
}
当我打开表单来创建新文章或编辑现有文章时,会显示一个包含我的用户实体用户的框,因此我可以选择其中一个,因为这两个表都在实体中与ManyToOne注释。但是,我不想选择任何用户。我想在Articles表中写下已经登录的用户名(实际ID,因为它们都已链接),并删除可用用户列表。
我已经设置了安全环境并且它正常工作,因此只有在用户登录时才会执行此代码。我想我必须编辑updateAction方法,但我不知道如何。
答案 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
字段。