CakePHP:在AppController beforeFilter中取消设置请求(发布)数据

时间:2013-04-19 12:37:43

标签: cakephp cakephp-2.0

我通过POST表单将特定值发布到我的CakePHP应用程序。在AppController中我处理这个特定的POST数据,然后我取消设置$ this-> request->数据,例如

    if(!empty($this->request->data['Keyboard'])) {
        $this->Session->write('Keyboard.active', $this->request->data['Keyboard']['active']);
        unset($this->request->data);
    }

之后我希望取消设置所有请求数据(因此$this->request->data)。在我的子控制器中,我将parent::beforefilter();作为其各自beforeFilter函数中的第一行代码,确保beforeFilter的{​​{1}}已启动。但是,在我的childController中,以下代码行仍将评估为true:

appController

如何“取消”is('post')来电?我在上面的if($this-request->is('post')) 中也尝试了$this->request->is('post') = false,但没有成功。

1 个答案:

答案 0 :(得分:1)

$this->request->is($anything)的“问题”(至少在你的情况下)是它只是一个比较变量的函数,而不是一个setter。

以下是API code,以防您想要查看。

因此,基本上,此代码将变量env('REQUEST_METHOD')POST进行比较(位于代码的detectors部分)。

$this->request->is('post') = false无法发挥作用。像

这样的东西
$_ENV["REQUEST_METHOD"] = null;
//or
unset($_ENV["REQUEST_METHOD"]);

取消设置后,请求数据可能有效,但我不保证,因为我没有尝试过。

我觉得这种方法很脏,如果没有可用的功能我根本不喜欢弄乱这些变量,但我希望你考虑所有可能的选择以避免弄乱{{1已经看到这是唯一的解决方案。否则你应该发表另一个问题来解决这个问题,看看是否会出现更好的方法。

希望在你的情况下有所帮助。