Cakephp2 - 从循环创建表单

时间:2016-08-25 12:22:51

标签: php cakephp cakephp-2.0

我用表格数据翻译了表格:

enter image description here

因此,此表包含记录,代表自定义翻译文本。

现在我想构建一个表单来编辑一个页面/表单中的所有行。

这是控制代码:

public function translate()  {
    $this->loadModel('Translate');
    $data = $this->Translate->find('all');
    $this->set('data', $data);

    pr ($this->request->data);

    if ($this->request->is('post','put')) {

        if ($this->Translate->save($this->request->data)) {
            $this->Session->setFlash('Recipe Saved!');
            return $this->redirect($this->referer());
        }
    }
}

并且查看 - 请注意,我已经使用循环创建输入,不确定cakephp是否有更好的方法来执行此操作。

<?php echo $this->Form->create('Translate'); ?>
<?php
foreach ($data as $d) {
    echo $this->Form->input('text', array('label' => 'Link strony', 'type' => 'text','value'=>$d['Translate']['text']));
    echo $this->Form->input('id', array('type' => 'hidden', 'value' => $d['Translate']['id']));
}
?>
<?php echo $this->Form->end(array('class' => 'btn btn-success floatRight', 'label' => 'Zapisz')); ?>

目前,这段代码有效,但并不像我预期的那样。 $this->request->data仅显示最后一个输入,忽略其他输入。附上,您会看到$ this-&gt; request-&gt;数据的调试。仅编辑最后一项。我想要的就是能够编辑所选输入并保存。谢谢你的帮助。

enter image description here

2 个答案:

答案 0 :(得分:3)

  

看起来您要在单个表单中保存多行。在这种情况下,   你需要改变一下你的方法。

     
      
  1. 在表单助手中使用正确的索引
  2.   
  3. 使用 saveAll()代替save()来保存多个数据。
  4.   

对视图文件的更改:

    <?php
       foreach ($data as $k => $d) {
           echo $this->Form->input('Translate.'.$k.'.text', array(
            'label' => 'Link strony', 
            'type'  => 'text',
            'value' =>$d['Translate']['text']
           ));

           echo $this->Form->input('Translate.'.$k.'.id', array(
               'type'  => 'hidden', 
               'value' => $d['Translate']['id']
           ));
      }
    ?>

然后,在你的控制器中:

if ($this->request->is('post','put')) {

       $this->Translate->saveAll($this->request->data['Translate']);

      /* Other code */
}

答案 1 :(得分:0)

尝试将名称指定为数组(translate []):

echo $this->Form->input('text', array('label' => 'Link strony', 'type' => 'text','value'=>$d['Translate']['text'],'name'=>'translate[]'));