gpt4 book ai didi

error-handling - 了解 cakephp3 错误处理

转载 作者:行者123 更新时间:2023-12-03 07:40:51 25 4
gpt4 key购买 nike

我想通过使用我的 AppController“initilize()”方法的子功能检查数据库表中的维护标志来为我的蛋糕网站创建一个维护页面。如果设置了标志,我会抛出我的自定义 MaintenanceException (目前没有什么特别的):

class MaintenanceException extends Exception{

}

为了处理它,我实现了一个自定义的 App Exception Renderer:
class AppExceptionRenderer extends ExceptionRenderer {
public function maintenance($error)
{
return "MAINTENANCE";
}
}

如果我将数据库标志设置为 true,我可以在我的网站上看到此维护文本,但我在 cake 的错误处理文档 ( http://book.cakephp.org/3.0/en/development/errors.html) 中找不到任何关于如何实际告诉异常渲染器渲染 View "maintenance" 的信息带模板 "infopage" .

我可以使用 ExceptionRenderer 来实现该功能吗?没有自定义错误 Controller ?如果没有,正确的 ErrorController 实现应该是什么样子?我已经尝试过了:
class AppExceptionRenderer extends ExceptionRenderer {

protected function _getController(){
return new ErrorController();
}

public function maintenance($error)
{
return $this->_getController()->maintenanceAction();
}

}

和...一起:
class ErrorController extends Controller {

public function __construct($request = null, $response = null) {
parent::__construct($request, $response);
if (count(Router::extensions()) &&
!isset($this->RequestHandler)
) {
$this->loadComponent('RequestHandler');
}
$eventManager = $this->eventManager();
if (isset($this->Auth)) {
$eventManager->detach($this->Auth);
}
if (isset($this->Security)) {
$eventManager->detach($this->Security);
}
$this->viewPath = 'Error';
}

public function maintenanceAction(){
return $this->render('maintenance','infopage');
}

}

但这只会引发 NullPointerExceptions 和 fatal error 。我也对蛋糕手册感到非常失望,因为那里的代码示例无法让我对如何完成任何事情以及我实际拥有的功能有一个印象。

最佳答案

因为我今天有更多的时间,所以我花了一个小时研究 cake Source 并找到了一个对我很有效的解决方案(并且可能是它应该完成的方式,尽管 cake 文档并没有真正给出提示):

第一步:覆盖 _template(...) -ExceptionRenderer的方法|在你自己的课上。就我而言,我复制了父级的方法,并在方法的开头添加了以下代码:

$isMaintenanceException = $exception instanceof MaintenanceException;

if($isMaintenanceException){
$template = 'maintenance';
return $this->template = $template;
}

这告诉我们的渲染器,错误模板名为 "maintentance" (应该位于文件夹:/Error)是它应该呈现的错误页面内容。

第二步:我们现在唯一要做的事情(在我看来这有点 hacky,但蛋糕文档以这种确切的方式提出)是将模板中的布局参数设置为我们要渲染的基本布局的名称.因此,只需在错误模板顶部添加以下代码:
$this->layout = "infopage";

这种方法实际上甚至不需要我创建的错误 Controller ,而且我仍然不知道蛋糕错误 Controller 实际上是如何工作的。如果我有更多时间,也许我会深入研究这个,但暂时。

关于error-handling - 了解 cakephp3 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28309945/

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