由于添加了一些 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 设置来做到这一点。