Maison  >  Article  >  développement back-end  >  Comment créer un gestionnaire d'exceptions personnalisé dans CakePHP ?

Comment créer un gestionnaire d'exceptions personnalisé dans CakePHP ?

WBOY
WBOYoriginal
2023-06-03 23:01:461223parcourir

CakePHP est un framework PHP populaire qui vous permet de créer rapidement des applications Web. Diverses exceptions peuvent se produire lors du traitement des entrées utilisateur et de l'exécution de tâches telles que des opérations de base de données. Comment gérer les exceptions afin qu'un message d'erreur ne soit pas présenté directement à l'utilisateur lorsqu'un problème survient ? C'est là qu'interviennent les gestionnaires d'exceptions personnalisés. Dans cet article, nous explorerons comment créer des gestionnaires d'exceptions personnalisés dans CakePHP.

Pourquoi avons-nous besoin de gestionnaires d'exceptions personnalisés ?

Lorsqu'une application Web lève une exception, CakePHP affiche une page d'erreur d'exception standard liée à l'application. Par défaut, ces pages incluent des traces de pile, des messages d'exception et d'autres informations contextuelles pouvant être présentes. Bien que cela soit très utile pour les développeurs, dans un environnement de production, nous ne pouvons pas présenter de tels messages d'erreur aux utilisateurs. Au lieu de cela, nous devons fournir des pages d'exception personnalisées pour garantir que votre application peut fonctionner correctement et protéger vos données et les informations confidentielles des utilisateurs.

Création d'un gestionnaire d'exceptions personnalisé dans CakePHP

Pour créer un gestionnaire d'exceptions personnalisé, nous utiliserons la classe Exception de CakePHP. Il s'agit d'une classe de base générale qui fournit de nombreuses propriétés et méthodes de gestion des exceptions. Nous allons créer une sous-classe qui étend la classe CakePHPExceptionRenderer. Voici les étapes pour ce faire : ExceptionRenderer类的扩展。以下是完成此操作的步骤:

  1. 创建自定义异常类

我们将创建一个名为AppException的异常类,该类将作为我们的应用程序中所有异常的基类。我们将在其中添加一些默认属性和方法,以确保所有异常都符合我们的要求。我们的自定义异常类应类似于以下示例:

<?php
namespace AppError;

use CakeCoreExceptionException;

class AppException extends Exception
{
    protected $_messageTemplate = 'An error occurred.';
    protected $_defaultCode = 500;

    public function __construct($message = null, $code = null, $previous = null)
    {
        if (empty($message)) {
            $message = $this->_messageTemplate;
        }

        if (empty($code)) {
            $code = $this->_defaultCode;
        }

        parent::__construct($message, $code, $previous);
    }

    public function getResponse()
    {
        // your custom response handling logic here
    }
}
  1. 创建AppExceptionRenderer

现在我们将创建一个新的异常渲染器类,并扩展CakeErrorExceptionRenderer类。在这个类中,我们将定义将在哪种异常情况下使用哪个模板。我们可以选择在这个类中定义不同的异常情况,例如HTTP 404错误、内部服务器错误等等。以下是示例AppExceptionRenderer类:

<?php 
.namespace AppError;

use CakeErrorExceptionRenderer;
use Throwable;

class AppExceptionRenderer extends ExceptionRenderer {

    public function render() {
        $exception = $this->error instanceof Throwable ? $this->error : new FatalErrorException($this->error->getMessage(), 0, E_ERROR, __FILE__, __LINE__);
        
        $this->controller->response = $this->_getJsonResponse($exception);
        
        $this->controller->response->statusCode($exception->getCode());
        
    }
    
    protected function _getJsonResponse(Throwable $exception): JsonResponse {
        $response = new JsonResponse([
            'status' => 'error',
            'code' => $exception->getCode(),
            'message' => $exception->getMessage(),
        ],JsonResponse::HTTP_OK);
        
        if (method_exists($exception, 'getResponse')) {
            $response = $exception->getResponse();
        }
        
        return $response;
    }
}

这个类会在应用程序运行时捕获异常并呈现自定义模板。您可以在此类中定义所需的逻辑,例如非常规异常接收器、自定义页面呈现等。

  1. 配置异常处理程序

现在我们已经定义了所有必要的类,我们需要告诉应用程序在捕获异常时使用这些类。我们将使用CakePHP的配置文件config/app.php中的Error

  1. Créez une classe d'exception personnalisée
Nous allons créer une classe d'exception appelée AppException qui servira de base classe pour toutes les exceptions dans notre application. Nous y ajouterons des propriétés et des méthodes par défaut pour nous assurer que toutes les exceptions répondent à nos exigences. Notre classe d'exception personnalisée devrait ressembler à l'exemple suivant :

'Error' => [
        'errorLevel' => E_ALL & ~E_USER_DEPRECATED,
        'exceptionRenderer' => 'AppErrorAppExceptionRenderer',
    ],

  1. Créer une classe AppExceptionRenderer
Nous allons maintenant créer une nouvelle exception classe renderer et étend la classe CakeErrorExceptionRenderer. Dans cette classe, nous définirons quel modèle sera utilisé dans quel cas d'exception. Nous pouvons choisir de définir différentes exceptions dans cette classe, comme les erreurs HTTP 404, les erreurs internes du serveur, etc. Voici un exemple de classe AppExceptionRenderer :

rrreee

Cette classe interceptera les exceptions et restituera un modèle personnalisé pendant l'exécution de l'application. Vous pouvez définir la logique requise dans cette classe, telle que des récepteurs d'exceptions non conventionnels, un rendu de page personnalisé, etc.

  1. Configuration des gestionnaires d'exceptions
Maintenant que nous avons défini toutes les classes nécessaires, nous devons dire à l'application d'utiliser ces classes lors de la détection des exceptions. Nous utiliserons la section Error du fichier de configuration de CakePHP config/app.php. Modifiez les paramètres suivants pour indiquer au framework d'utiliser notre gestionnaire d'exceptions personnalisé :

rrreee

Cela indiquera à CakePHP d'utiliser notre gestionnaire d'exceptions personnalisé lorsqu'une exception est levée pendant l'exécution de l'application. 🎜🎜 Résumé 🎜🎜 La création de gestionnaires d'exceptions personnalisés dans CakePHP nécessite un travail supplémentaire, mais les résultats en valent la peine. En utilisant des gestionnaires d'exceptions personnalisés, nous pouvons protéger nos applications et nos données utilisateur tout en garantissant que l'application fonctionne toujours correctement lorsqu'une erreur se produit. Les étapes mentionnées ci-dessus ne sont qu'un moyen simple de montrer comment personnaliser le gestionnaire d'exceptions. Vous pouvez le modifier et l'étendre selon vos besoins en fonction de la situation réelle. 🎜🎜J'espère que cet article vous aidera. Si vous avez des questions ou des commentaires, veuillez les poser dans la section commentaires ci-dessous. Merci d'avoir lu! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn