【问题标题】:different exceptions for each controller cakephp每个控制器 cakephp 的不同异常
【发布时间】:2014-08-07 07:03:13
【问题描述】:

我想用 cakephp 为我的项目中的每个控制器创建异常。示例:

class UsersController extends AppController {

    public function add(){

        if(!$this->User->save($this->request->data)){
            throw new UserException('Error save User/add'); 
        }

    }

}

class FriendsController extends AppController {

    public function add(){

        if(!$this->Friend->save($this->request->data)){
            throw new FriendException('Error save Friend/add');
        }

    }

}

我正在尝试这个,但不起作用...永远不要绘制登录类异常用户/朋友

在 app/Config/core.php 中

Configure::write('Exception.handler', 'UserException::handle');
Configure::write('Exception.handler', 'FriendException::handle');

在 app/Config/bootstrap.php 中

App::uses('UserException', 'Lib');
App::uses('FriendException', 'Lib');

在 app/Lib/UserException.php 中

class UserException {
    public static function handle($error) {
        $this->log($error)
    }
}

在 app/Lib/FriendException.php 中

class FriendException {
    public static function handle($error) {
        $this->log($error)
    }
}

有什么想法吗? 问候!

【问题讨论】:

  • 你为什么不用try catch.?
  • 在每个函数中?我做到了。但是我想在发生错误时发送电子邮件。在日志中始终:致命错误(1):在中找不到类“UserException”

标签: php cakephp


【解决方案1】:

每个控制器的异常似乎都是多余的。为什么你需要 2 个异常类 UserExceptionFriendException 当它们相同时,唯一的区别是你传递的消息?核心的ExceptionHandler 还内置了日志记录功能。您可以直接发送 CakeExceptionRuntimeException 并附上所需的消息。

你意识到你的代码了吗:

Configure::write('Exception.handler', 'UserException::handle');
Configure::write('Exception.handler', 'FriendException::handle');

是否覆盖了配置相同的变量?

无论如何,'Exception.handler' 配置旨在指定处理所有异常的类。您可以将异常类与错误处理程序类混淆。异常类没有任何handle() 方法。您的异常类应该扩展 CakeException 并覆盖所需的方法/属性。

【讨论】:

  • 现在我只有一个例外。在我的控制器中,我输入: throw new AppExceptionHandler('Exception error');但日志说:找不到类“AppExceptionHandler”
  • 您仍然不了解异常和异常处理程序之间的区别。你应该抛出一个异常类实例而不是异常处理程序类实例。
【解决方案2】:

使用CakeDC Utils plugin,它带有一个可配置的EmailErrorHandler,可以根据错误级别发送电子邮件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多