0

由于添加了一些 ajax 操作,我在 CakePHP 应用程序中遇到了问题。

我的表被调用orders所以很明显我的控制器被调用OrdersController并且模型被调用Order

我对 CakePHP 最佳实践的理解是,如果我要在Order模型上运行任何逻辑,它应该在OrdersController. 这对于基本的 CRUD 内容来说很好,但现在我的一些视图需要发送 ajax 请求来操作Order数据,我遇到了问题。

问题是要让ajax正常工作,我必须把它放在开头OrdersController

var $layout = 'ajax';  // uses an empty layout
var $autoRender=false; // renders nothing by default

然后,为了阻止安全组件干扰我的 Ajax 表单提交,我还需要这个:

public function beforeFilter() {
    parent::beforeFilter();
    $this->Security->csrfUseOnce = false;
    $this->Security->csrfExpires = '+1 hour';
}

如果控制器仅用于 Ajax 请求,这些都不是问题,但问题是它也用于常规 Cake 操作。

答案是我应该有两个控制器吗?一个用于常规操作,一个用于 ajax 操作?Cake 文档中似乎没有提到这一点,而且它似乎不是一种非常有效的做事方式。

我知道我可以在每个操作的基础上更改布局和可能的自动渲染设置,但我不明白如何使用需要在 beforeFilter 中的 csrf 设置来做到这一点。

4

1 回答 1

1

无需单独的控制器。使用蛋糕请求处理程序。在您的控制器方法中,您可以测试它是否是 Ajax 请求。

if ($this->request->is('ajax')) {
    //set to Ajax layout and security settings, etc

您需要在控制器顶部包含请求处理程序组件:

public $components = array('RequestHandler');

有关更多信息,请参阅烹饪书中的此页面:http: //book.cakephp.org/2.0/en/core-libraries/components/request-handling.html

于 2012-07-13T08:43:17.207 回答