使用一个表单在同一页面上编辑不同的项目 - Symfony2

时间:2013-07-19 05:22:04

标签: symfony

我正在使用Symfony2,我有一个项目列表,其中有一个按钮,用于编辑每个项目旁边的项目。像这样的东西

第1项| 修改

第2项| 修改

第3项| 修改

在同一页面上是版本的形式,但它是隐藏的,当你点击按钮编辑一个项目时,它会变成js可见。问题是您仍然在同一页面上,对于每个项目,表单应该填充不同的对象。你有任何想法如何实现这一点,因为当网址没有改变时我不知道如何调用不同的控制器。非常感谢你提前! :)

JS:

$(".editItem").on('click', function(){

    $(".show").toggle();
    return false;

});

2 个答案:

答案 0 :(得分:1)

许多解决方案:

  • 只有一个控制器,并向他发送一个隐藏的输入,其中包含要编辑的元素的ID;
  • 在您点击修改链接时使用javascript设置相应的操作属性。

如果我们使用第一种方法,我们所做的是使用ajax或表单检索当前项目,假设您的编辑链接看起来像这样:

<a href="{{ path("url", {id: myid}) }}" data-id="{{ myid }}">Edit</a>

在javascript中我们这样做:

$('.editItem').click(function(e) {

   // We avoid the default behaviour (ie following the link)
   e.preventDefault();

   // We load the form with ajax
   $('.show').load('', {id: $(this).attr('data-id')});
});

然后在您的控制器(显示当前视图的控制器)中:

 if($request->isXmlHttpRequest()) {
     $myid = $request->query->get('id'); // Could be $request->request


     $entity = $em->getRepository('...')->getOneById($myid);

     return $this->render('form.html.twig', array('entity' => $entity));

 }

答案 1 :(得分:1)

这是我过去使用过的方法:

然后,当您调用视图时,您可以渲染表单,它将自动附加子表单。然后你的JS只需要打开/关闭相应的表单。

在处理表单时,你需要全部使用它们,所以如果你有一些识别哪个元素的方法是最好的。

你也会遇到标签问题 - 这只是摆弄主题的一个案例。