【问题标题】:symfony2 edit more entities in same pagesymfony2 在同一页面中编辑更多实体
【发布时间】:2015-02-02 03:53:53
【问题描述】:

如何在同一页面中编辑更多产品实体(不是 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 以将所有表单更新显示为只有一个提交的表格?

【问题讨论】:

标签: php symfony


【解决方案1】:

这不是关于 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 %}

【讨论】:

  • 是的,显示更多表单并呈现数据,但在 html 中有相同的代码(foreach 行),其中提交请求的转储仅提交最后一个数据...[“pr_sfbundle_product” ]=> 数组(4) { ["descSrc"]=> 字符串(0) "" ["etatTx"]=> 字符串(1) "2" ["etatRx"]=> 字符串(1) "2" [ "descDest"]=> string(3) "aaa" } 如何解决这个问题。
  • 解决方法是更改​​表单名称。怎么做? tks
  • 一次不能提交多个(这与 Symfony 无关...)。您将不得不使用“收集”表单类型而不是表单数组。
【解决方案2】:

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

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

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

在我的控制器中 编辑动作:

        $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%}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多