gpt4 book ai didi

php - CakePHP - Controller::flash() 不重定向

转载 作者:行者123 更新时间:2023-12-04 22:31:32 24 4
gpt4 key购买 nike

使用 CakePHP 2.1 我有以下代码

public function getForm($id=null){
$this->loadModel('DynamicFormResponse');
/**
* Check if form exists
*/
$this->form_schema= $this->DynamicForm->isValidForm($id);

if($this->form_schema == false){
$this->flash("Invalid form", $this->referer(
array('controller'=>"pages", 'action' => 'display')
));
}
...
...

我面临的问题是,调用 $this->flash() 呈现 flash 页面,但也继续执行 Controller 。

所以除非我做类似的事情

if($this->form_schema == false){
$this->flash("Invalid form", $this->referer(
array('controller'=>"pages", 'action' => 'display')
));
return;
}

Controller 不会终止。

主要问题出现在调用_crsf_error方法时

function _csrf_error() {

$this->flash("csrf Error", $this->referer(
array('controller'=>"pages", 'action' => 'display')
));
}

由于 flash 方法不重定向 它根本不提供 csrf 保护。在 _crsf_error 方法中的 $this->flash() 之后使用 return; 不起作用。

PS:完整代码可用 here

最佳答案

虽然上面的答案很好地解释了 flash() 方法的作用,但对我来说,它并没有完全回答问题,而是提供了一个很好的选择。

我个人想使用 flash 方法,这样我就不必使用 session 组件,而且我发现自己也卡在了我的 flash 消息上。在 cake 2.x 文档中,它说 flash() 方法的第二个参数是 CakePHP 的相对 URL。这意味着下面应该显示一条消息,然后重定向到索引操作。

$this->flash(__("Some message for the user here..."), array("action" => "index"));

我的问题,看起来像原始发布者的问题,是它向您显示了 flash 消息但之后没有进行重定向。

我用我的应用程序对此进行了彻底测试,罪魁祸首是 core.php 中的调试设置

Configure::write('debug', 0);

必须将调试值设置为“0”才能进行重定向。我不知道为什么会这样,但当我的调试设置设置为 1 或更高时,我测试了大约 10 次和 10/10,我刚收到闪现消息。如果我将其设置为 0,则一切正常。这对我来说不是什么大问题,因为无论如何生产环境都应该将此设置设置为 0。

如果其他人对调试时为什么不发生重定向有一些见解,请赐教。

希望这对您有所帮助。

关于php - CakePHP - Controller::flash() 不重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9805952/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com