symfony2在同一页面中编辑更多实体

时间:2015-02-02 03:53:53

标签: php symfony

如何在同一页面中编辑更多产品实体(1到1)。 在我的编辑中:

    $entities=$em->getRepository('MyBundle:Product')->findAll();
    $editForm=array(); 
    $deleteForm=array();
    foreach ($entities as $product )
    {
        $editForm [$port->getId()]= $this->createEditForm($product);
        $deleteForm[$port->getId()] = $this->createDeleteForm($product->getId());
    }

    return $this->render('MyBundle:Product:edit.html.twig', array(
        'entities'      => $entities,
        'edit_form'   => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),
    ));

我有这个错误:

  Error: Call to a member function createView() on a non-object

如何更新edit.thml.twig以将所有表单更新显示为仅包含一个提交的表格?

2 个答案:

答案 0 :(得分:0)

这不是关于Symfony2的,但是关于PHP,你在一个数组上调用一个方法......

考虑这样的事情:

$entities = $em->getRepository('MyBundle:Product')->findAll();
$editForms = array();
$deleteForms = array();
foreach ($entities as $product)
{
    $editForms[$port->getId()] = $this->createEditForm($product)
        ->createView();
    $deleteForms[$port->getId()] = $this->createDeleteForm($product->getId())
        ->createView();
}

return $this->render('MyBundle:Product:edit.html.twig', array(
    'entities'     => $entities,
    'edit_forms'   => $editForms,
    'delete_forms' => $deleteForms,
));

使用这样的模板:

{% for form in edit_foms %}
    {{ form(form) }}
{% endfor %}

{% for form in delete_foms %}
    {{ form(form) }}
{% endfor %}

答案 1 :(得分:0)

我解决了这个问题: 更改表单名称:

public $name;
/**
 * @return string
 */

public function getName()
{
    return (string)'port_'.$this->name;
}
public function __construct($name=0) {
    $this->name=$name;
}

并在我的控制器中 editAction:

        $entities = $em->getRepository('InfraProductBundle:InfraPortDdf')->findAll();

      foreach ($entities as $port )
    {
        $editForm [$port->getId()]= $this->createEditForm($port);


        $edit_view[$port->getId()]=$editForm[$port->getId()]->createView();
    }
 return $this->render('......:edit.html.twig', array(
        'entities'      => $entities,
        'edit_form'   => $edit_view,

    ));

在更新操作中

 foreach  ($array_id as $key=>$id){
        if(!is_numeric(str_replace('port_','',$id)))
            continue;
    $entity = $em->getRepository('InfraProductBundle:InfraPortDdf')->find(str_replace('port_','',$id));

    if (!$entity) {
        throw $this->createNotFoundException('Unable to find InfraPortDdf entity.');
    }
    $editForm = $this->createEditForm($entity);
    if($editForm->submit($request->request->get($id)))
        $em->flush();


    }

在我的edit.html.twig中:

   {% for key, edit in edit_form %}
   ...
   {{form_widget(edit.description,{name:'['~key~'][description]',  'attr': { 'name' : '['~key~'][description]' } } ) }} 
   ....
   {%endfor%}