CakePHP 1.3:如何在不进入视图的情况下执行操作

时间:2013-03-18 22:55:53

标签: cakephp cakephp-1.3

我通过操作search创建了一个页面,用户可以在其中指定一些选项以显示数据行。此过程需要几秒钟,因为需要相当多的后端逻辑。在返回的数据上,用户可以通过操作add_data将一行数据添加到另一个表中以供将来参考。

请注意,搜索结果数据会保存在表格中,以便在用户决定保存该行时可以随时使用该行(搜索结果是来自多个数据库的数据汇编)。在操作add_data之后,我希望能够使用搜索结果维护search视图,而不是让浏览器转到add_data视图并返回引荐来源,其中将不会有搜索结果。

现在,我知道我可以检查这个表,我保存了搜索结果,只是将其加载到search视图中,但我很想知道是否可以在保持当前操作视图完好无需咨询数据库。据我所知,没有任何$this->redirect(...)有效,因为搜索结果页的网址缺少任何参数(例如mycontroller/search)。

我添加了一个按钮,使用以下代码添加用户所需的数据:

echo $this->Html->link('+', array('action' => 'add_data', $reference_id));    // + button is created

有办法做到这一点吗?最好使用最小的Javascript。

2 个答案:

答案 0 :(得分:2)

按照here步骤为蛋糕项目添加ajax支持。

然后,在呈现搜索视图的控制器中启用ajax帮助程序:

$this->helpers('Ajax');

您应该能够像这样呈现您的链接,并且不会将用户引导离开搜索页面:

<?php echo $this->Ajax->link(
  '+', 
  array('action' => 'add_data', $reference_id),
  array('update' => 'my-div')
); 
?>
<div id='my-div'></div>

由于您希望用户能够将数据发送到该操作,因此您可能希望查看发布表单而不仅仅是链接。 Ajax助手还提供了通过Ajax提交表单的能力:

echo $form->create();
echo $form->input('field1');
echo $form->input('field2');
echo $ajax->submit('Submit', array(
   'url'=> array('controller'=>'mycontroller', 'action'=>'add_data'),
   'update' => 'my-div'

));
echo $form->end();

在你的控制器......

function add_data() {
  // ... do something
  $this->layout = 'ajax';
  $this->set('message', 'Your message here!');
}

在add_data视图....

<?php echo $message; ?>

答案 1 :(得分:0)

我相信你正在寻找View :: render方法。

<?php

...
function addData(...) {
    ...
    ...

    $this->render('search'); // Render the search view instead of the "add_data" view.
}
...

?>

或者

<?php

...
function search(...) {
    ...
    ...

    if (<criteria)
        $this->addData(...); // Move to another action while keeping the current view in tact.
}
...
function addData(...) {
    if (<criteriaForSearchView>)
        $this->render('search');
    // Else render the "add_data" view.
}
...

?>

如果这有帮助,请告诉我!谢谢!