gpt4 book ai didi

cakephp - 在 CakePHP 中重定向到维护页面不起作用

转载 作者:行者123 更新时间:2023-12-03 09:00:28 27 4
gpt4 key购买 nike

我正在尝试设置一个维护页面,以便在禁用该站点时,无论请求哪个页面,它都应该出现。

我目前尝试使用 $this->cakeError() 执行此操作:

app_controller.php :

function beforeFilter(){
....
if($this->__get_config('maintenance_status') == 1){
$this->cakeError('maintenance', array('message' => $this->__get_config('maintenance_message')));
}
....
}

app_error.php :
function maintenance($message){
$this->controller->set('message', $message['message']);
($this->controller->RequestHandler->isAjax()) ? $this->_outputMessage('ajax_maintenance') : $this->_outputMessage('maintenance');
}

问题是发生了一个 fatal error ,它说: Call to a member function isAjax() on a non-object .但我显然设置了 RequestHandler app_controller.php 中的组件.此外,我尝试从另一个 Controller 中调用此错误,但它没有给我任何 fatal error 。

可能是什么问题呢?为什么它不能识别我已经初始化了组件?

最佳答案

From the CakePHP book :

Calling this method will show an error page to the user and halt any further processing in your application



我假设您在 AppController 中的某个回调中调用错误。 .

如果是这种情况,您很可能会在组件实例化之前暂停脚本的执行。这肯定会导致您的错误。

现在,我认为这个错误是重新评估您如何处理问题的好机会。这真的是一个错误吗?您知道维护状态已设置,所以它是 预计 向用户显示此页面。这不是错误。此外,您当然不希望日志中有 10,000 条消息告诉您您打开了维护!

我认为这可以通过使用一些 Controller 回调和一些代码来更好地解决。

我不知道 _get_config() 是什么,所以我假设它是一个自定义用户函数,您可以在此回调中调用它。

我们将使用 beforeFilter() Controller 回调。
class AppController extends Controller {

public function beforeFilter() {
if ($this->_get_config('maintenance_status') === 1) {
$this->redirect('/maintenance');
}
}

}

现在,您只需设置一个维护 Controller ,附加到它自己的 View ,它将正确显示您的维护消息,并且不会在您的错误日志中记录维护期间的所有这些连接尝试。

关于cakephp - 在 CakePHP 中重定向到维护页面不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6780992/

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