【问题标题】:Cakephp generated form not submitting all dataCakephp 生成的表单未提交所有数据
【发布时间】:2013-09-21 09:06:41
【问题描述】:

我有一个名为 Price.ctp 的视图,其代码如下。它创建一个表单,该表单回显来自名为 $products 的变量的所有数据,该变量包含名为 Products 的表中的所有数据。

<?php echo $this->Form->create('Product', array('action' => 'changePrice')); ?>
<fieldset>
    <h3>Products</h3>
        <?php
            foreach($products as $k=>$v){
                echo $this->Form->hidden('id', array('value'=> $v["Product"]['id']));
                echo $this->Form->input('name', array('value' => $v["Product"]["name"] ));
                echo $this->Form->hidden('slug', array('value'=>$v["Product"]['slug']));
                echo $this->Form->hidden('description', array('value'=>$v["Product"]['description']));
                echo $this->Form->hidden('cateID', array('value'=>$v["Product"]['cateID']));
                echo $this->Form->input('price', array('value' => $v["Product"]['price']));
                echo $this->Form->hidden('photo', array('value'=>$v["Product"]['photo']));
                echo $this->Form->hidden('photo_dir', array('value'=>$v["Product"]['photo_dir']));
                echo $this->Form->hidden('active', array('value'=>$v["Product"]['active']));
                echo $this->Form->hidden('views', array('value'=>$v["Product"]['views']));
                echo $this->Form->hidden('created', array('value'=>$v["Product"]['created']));
                echo $this->Form->hidden('modified', array('value'=>$v["Product"]['modified']));
    }?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>

它发送到这个控制器方法,称为 changePrice

public function changePrice(){
        $this->Product->saveMany($this->request->data['Product']);

        $this->Session->setFlash( "Prices Saved.");
        $this->redirect ( "/admin/products/" );
        return;

    }

但是,当我使用 debug() 检查 $this->request->data 的内容时,它显示只有视图中 foreach 循环的最终迭代正在发送。

换个说法,如果原来的 $products 变量(传入视图 prices.ctp)有 4 个产品:product1、product2、product3 和 product4,它们都有自己的来自 Product 表的数据(id、name、等),当在页面上按下提交按钮时,只有product4的变量会被传递到$this->request->data中。

为什么会这样?

干杯

【问题讨论】:

    标签: php forms cakephp


    【解决方案1】:

    你可以这样做来获取所有产品的数据

    <?php
        foreach($products as $k=>$v){
            echo $this->Form->hidden("Product.{$k}.id", array('value'=> $v["Product"]['id']));
            echo $this->Form->input("Product.{$k}.name", array('value' => $v["Product"]["name"] ));
            echo $this->Form->hidden("Product.{$k}.slug", array('value'=>$v["Product"]['slug']));
            echo $this->Form->hidden("Product.{$k}.description", array('value'=>$v["Product"]['description']));
            echo $this->Form->hidden("Product.{$k}.cateID", array('value'=>$v["Product"]['cateID']));
            echo $this->Form->input("Product.{$k}.price", array('value' => $v["Product"]['price']));
            echo $this->Form->hidden("Product.{$k}.photo", array('value'=>$v["Product"]['photo']));
            echo $this->Form->hidden("Product.{$k}.photo_dir", array('value'=>$v["Product"]['photo_dir']));
            echo $this->Form->hidden("Product.{$k}.active", array('value'=>$v["Product"]['active']));
            echo $this->Form->hidden("Product.{$k}.views", array('value'=>$v["Product"]['views']));
            echo $this->Form->hidden("Product.{$k}.created", array('value'=>$v["Product"]['created']));
            echo $this->Form->hidden("Product.{$k}.modified", array('value'=>$v["Product"]['modified']));
        }
    ?>
    

    【讨论】:

    • 非常感谢!这完美地工作。我可以看到我没有引用每个产品索引。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2012-01-23
    • 1970-01-01
    • 2016-11-16
    • 2020-12-25
    • 1970-01-01
    相关资源
    最近更新 更多