0

我有一个带有以下表格的产品搜索页面。搜索结果显示在同一页面上,搜索栏位于顶部。

echo $this->Form->create('Searches', array('action'=>'products', 'type' => 'get', 'name' => 'textbox1'));
echo $form->input($varName1, array('label' => false));
echo $form->end('Locate');

我在搜索结果旁边还有一个小框,它允许(它还不起作用)用户使用复选框标记产品,并通过单击按钮相应地更新其数据库(表products和使用模型)。Product请注意,我有一个Searches用于此搜索页面的控制器。

<form method="link" action="/myapp/product/test_update_db>
<label><input type="checkbox" name="flag1" <?php echo $preCheckBox1; ?>>Flag 1</input></label>
<label><input type="checkbox" name="flag2" <?php echo $preCheckBox2; ?>>Flag 2</input></label>                          
    <input type="submit" value="Update">                                
</form>

我很难用这种方法弄清楚如何执行这个复选框和数据库更新例程。我正在访问我想访问的链接 ( /myapp/product/test_update_db),但我不知道如何将变量flag1flag2以及此结果的行 ID ( $results['Product']['id'])) 带到新页面。

有人可以指导我如何巧妙地执行此操作吗?这种一般方法是否正确?如果不是,我应该走什么路线?如果可能的话,我现在不想使用 javascript。

编辑:如果我使用 URL 传递数据,我想我可以完成这项工作。但我仍然想知道如何在“幕后”或在 MVC 中完成这项工作。我觉得我正在对 CakePHP 平台进行黑客攻击。

更新:所以,我最终使用 URL 参数来检索信息片段,如flag1flag2。我仍在寻找另一种方法。

4

3 回答 3

0

To see where your is-checkbox-checked data is located, do the following in your controller:

// Cake 2.0+
debug($this->request->data);

// previous versions
debug($this->data);

If you want to pass data to your search controller from the current page, you can always add the data to your form:

$this->input
    (
        'Product.id',
        array
        (
            'type' => 'hidden',
            'value' => $yourProductId
        )
    );
于 2012-05-02T09:44:57.840 回答
0

我最终使用嵌入在 URL 中的信息来获取提交数据。像下面的东西..

在 Products 控制器中,当提交带有flag1和的表单时:flag2

public function test_update_db() {      
    // Get variables from URL, if any, and save accordingly     
    $result = $this->Product->updateProduct($this->params['url'], 'url');
    if ($result) {
        $this->Session->setFlash('Successfully updated!', 'default', array('class' => 'success'));
        $this->redirect($this->referer());
    }
    else {
        $this->Session->setFlash('Update was unsuccessful!', 'default', array('class' => 'error'));
        $this->redirect($this->referer());
    }       
}

这适用于做我需要做的事情。我觉得有一种更合适的方法可以做到这一点。

于 2012-05-03T15:35:22.190 回答
0
if ($result) {
    $this->Session->setFlash('Successfully updated!', 'default', array('class' => 'success'));
    $this->redirect($this->referer());
}
于 2016-01-06T12:28:53.833 回答