CakePHP更新表单更改

时间:2017-05-22 00:47:56

标签: php cakephp

此表格:

<?php
    echo $this->Form->create();
    echo $this->Form->select('quantity', [1,2,3,4,5,6,7,8,9], ['value'=> $this->Number->format($cartitem['quantity']) ,
        'class'=>'form-control', 'type'=>'number']);
    echo $this->Form->end();
?>

在视图中。我想这样做,当用户选择一个新的数量值时,它会调用cartController中的updateQuantity函数。

public function updateQuantity($prod_id)
{
    //get query for product and user (need for using composite key)
    $query = $this->Cart->find('all')
        ->where(['users_id =' => $this->Auth->user('id'), 'product_id' => $prod_id])
        ->contain([])
        ->limit(1);

    $data = $query->toArray();
    $data[0]['quantity'] = $this->request->getParam('quantity');

    if ($this->Cart->save($this->makeEntityFromArray($data[0]))) {
        $this->Flash->info(__('The item has been updated.'));

        return $this->redirect(['action' => 'index']);
    }
    $this->Flash->info(__('item update fail. Please, try again.'));
}

return $this->redirect($this->referer());

我现在可能只是刷新页面进行更新。所以当我选择下拉列表中的另一个项目时,我想调用该方法。怎么样?

1 个答案:

答案 0 :(得分:0)

如果您对页面重新加载没问题,只需将表单指向您的操作:

$this->Form->create(null,["url" => ["controller" => "Cart", "action" => "updateQuantity"], "id" => "my-form"]);

如果您想通过POST提交表单,请同时更改这些行:

$data[0]['quantity'] = $this->request->getParam('quantity');

为:

$data[0]['quantity'] = $this->request->getData('quanitity');

或者,如果您想通过GET提交表单,只需在表单中添加另一个选项 - &gt; create():"type" => "get"

您还需要一种提交此表单的方法。由于您希望在输入值更改时提交它,因此您需要使用一些JavaScript。使用jQuery的示例:

$("#my-select").change(function(){
    $("#my-form").submit();
});

如果您不想重新加载页面,可以使用例如调用您的操作。 $就()。