Table des matières
您可能感兴趣的文章:
Maison développement back-end tutoriel php Explication détaillée de la gestion des exceptions dans l'exemple ThinkPHP_php

Explication détaillée de la gestion des exceptions dans l'exemple ThinkPHP_php

Jun 25, 2018 pm 05:01 PM
thinkphp thinkphp5 异常处理 抛出异常

Différent de la gestion des exceptions par défaut de PHP, ThinkPHP ne génère pas un simple message d'erreur, mais une page d'erreur humanisée. L'article suivant vous présente principalement les informations pertinentes sur la gestion des exceptions dans ThinkPHP. Les amis qui en ont besoin peuvent se référer à

Que sont les exceptions ?

Dans une perspective plus large, les exceptions incluent Il y a deux aspects. d'une part, il s'agit d'une exception causée par des erreurs de syntaxe et d'exécution lors de l'exécution du programme. D'autre part, cela ne donne pas de retour correct. Par exemple, si le client souhaite interroger un certain produit, mais qu'il n'est pas trouvé, je le fais. Je pense que c'est aussi anormal.

Le framework TP de la première exception lui-même affichera des informations d'erreur sur la page, mais la deuxième exception ne génère généralement aucune information, il est donc très gênant de déboguer.

Cet article présentera en détail le contenu pertinent sur la gestion des exceptions ThinkPHP et le partagera pour votre référence et votre étude. Je ne dirai pas grand-chose ci-dessous, jetons un coup d'œil à l'introduction détaillée.

Environnement prérequis

Maintenant, PHP fournit souvent des interfaces pour le front-end, donc notre gestion des exceptions est également basée sur cela.

Au stade du développement, la gestion originale des exceptions de TP consiste à afficher des informations sur les exceptions sur la page, ce qui peut répondre aux besoins. Cependant, dans l'environnement de production, les exceptions doivent être gérées d'une autre manière.

Cet article porte sur la gestion des exceptions dans l'environnement de production

Programmation AOP

L'idée de programmation AOP, c'est-à-dire l'idée de programmation orientée aspect, est très populaire dans de nombreux langages . En d'autres termes, il s'agit de gérer les problèmes de manière unifiée au lieu de gérer plusieurs problèmes de la même manière. Pour la gestion des exceptions, il s'agit de définir des informations d'exception unifiées et de les gérer de manière unifiée

Idée générale

Personnalisez la classe de gestion des exceptions, remplacez la méthode de rendu de la classe de gestion des exceptions par défaut, puis configurez la classe de gestion des exceptions personnalisée pour gérer toutes les exceptions

Implémentation du code

Créez l'exception de répertoire dans le répertoire racine et créez ExceptionHandle.php en dessous. Cette classe doit hériter de la classe handle

class ExceptionHandler extends Handle
Copier après la connexion

Créez plusieurs propriétés pour définir les informations d'exception

// http 错误码 
private $code; 
// 自定义异常信息 
private $msg; 
// 自定义错误码 
private $errorCode;
Copier après la connexion

Remplacez la méthode de rendu dans la classe Handle, lorsque nous utilisons throw new Exception() dans le code pour générer des informations d'exception, la méthode de rendu est en fait appelée, nous devons donc remplacer cette méthode pour renvoyer nos propres informations

public function render(Exception $ex) 
 { 
 return json(['msg'=>"自定义异常信息"]); 
nbsp; }
Copier après la connexion

Créez un nouveau produit contrôleur ci-dessous, ajoutez des méthodes et testez

public function getProduct($id) 
 { 
 try{ 
  3/0; 
 } 
 catch(Exception $ex){ 
  throw $ex; 
 } 
 }
Copier après la connexion

Ajoutez ensuite les itinéraires suivants

Route::get("product/:id","api/v1.Product/getProduct");
Copier après la connexion

Entrez l'url suivante pour tester

http://z.cn/product/2

Le Le résultat de la sortie de la page est le suivant

On peut voir qu'il n'exécute pas la fonction de gestion des exceptions personnalisée.

Utiliser la gestion personnalisée des exceptions

Modifier la configuration suivante dans config.php


// 异常处理handle类 留空使用 \think\exception\Handle 
 'exception_handle' => 'app\lib\exception\ExceptionHandler',
Copier après la connexion

Ensuite, exécutez

Classe de gestion des exceptions personnalisée

Le Le premier type d'exception concerne les anomalies causées par le comportement de l'utilisateur. Par exemple, aucune donnée répondant aux conditions n'est trouvée (d'un autre point de vue, il ne s'agit pas réellement d'une exception. Le premier type d'erreur est une erreur d'exécution). Les exceptions provoquées par les utilisateurs peuvent être divisées en plusieurs types, les classes associées doivent donc être personnalisées.

Définissez d'abord une classe parent

class BaseException extends Exception 
{ 
 //http 状态码 
 public $code; 
//错误具体消息 
 public $msg; 
//自定义错误码 
 public $errorCode; 
 
 //构造函数用于接收传入的异常信息,并初始化类中的属性 
 public function __construct($params) 
 { 
  if (!is_array($params)) { 
   return; 
  } 
  if (array_key_exists('code', $params)) { 
   $this->code = $params['code']; 
  } 
  if (array_key_exists('msg', $params)) { 
   $this->msg = $params['msg']; 
  } 
  if (array_key_exists('errorCode', $params)) { 
   $this->errorCode = $params['errorCode']; 
  } 
 } 
}
Copier après la connexion

Définissez ensuite un gestionnaire d'exceptions pour gérer les informations sur le produit introuvables. , utilisé pour remplacer divers attributs de la classe parent, et les informations d'attribut de cette classe peuvent également être modifiées, comme msg

class ProductNotFoundException extends BaseException 
{ 
 //http 状态码 
 public $code = 404; 
//错误具体消息 
 public $msg = "请求的产品不存在"; 
//自定义错误码 
 public $errorCode = 40000; 
}
Copier après la connexion

Gestion des différentes exceptions

Dans la méthode de rendu, gérez-les séparément en fonction des différentes exceptions

//分别处理两种不容类型异常:1、用户错误 2.代码与运行时错误 
  if ($ex instanceof BaseException) { 
 
  } else { 
  
  }
Copier après la connexion

Remarque : lorsqu'une exception est levée, la fonction de rendu sera exécutée et l'objet d'exception lancé sera copié dans le paramètre $ex, afin que le type d'exception puisse être déterminé en fonction de ce paramètre

La clé est maintenant l'environnement de production, nous espérons donc que les informations d'exception renvoyées pourront être comprises par le personnel frontal, au lieu d'afficher les informations d'erreur sur la page comme ci-dessus, y compris les informations sur la pile, etc.

那么前前端贺后端人员都能够看懂的信息一定是 json(当然也可以是xml)了,修改 render 方法

if ($ex instanceof BaseException) { 
   $this->code = $ex->code; 
   $this->msg = $ex->msg; 
   $this->errorCode = $ex->errorCode; 
  } else { 
//这里是在运行时产生的各种异常,所以无法准确输出异常信息,所以只能统一输出是服务器错误信息 
   $this->code = 500; 
   $this->msg = "服务器内部错误"; 
   $this->errorCode = 999; 
  }
Copier après la connexion

然后以 json 格式返回错误信息

$result = [ 
   'msg' => $this->msg, 
   'error_code' => $this->errorCode, 
   'request_url' => request()->url() 
  ]; 
  return json($result,$this->code);
Copier après la connexion

至此,全局的异常处理就编写好了,下面在 product.php 中编码进行测试

public function getProduct($id) 
 { 
  //处理程序运行时错误 
  /*try{ 
   3/0; 
  } 
  catch(Exception $ex){ 
   throw $ex; 
  }*/ 
  //处理用户行为产生的错误 
  $error=[ 
   'msg'=>'没有找到合适的产品' 
  ]; 
  $ex=new ProductNotFoundException($error); 
  throw $ex; 
 }
Copier après la connexion

提示:生产环境不要忘了将 app_debug 修改为 false

总结

您可能感兴趣的文章:

PHP7基于curl实现的上传图片功能php技巧

PHP区块查询实现方法分析php技巧

PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析php技巧






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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Exceptions de fonctions C++ et multithreading : gestion des erreurs dans les environnements concurrents Exceptions de fonctions C++ et multithreading : gestion des erreurs dans les environnements concurrents May 04, 2024 pm 04:42 PM

La gestion des exceptions de fonction en C++ est particulièrement importante pour les environnements multithread afin de garantir la sécurité des threads et l’intégrité des données. L'instruction try-catch vous permet d'intercepter et de gérer des types spécifiques d'exceptions lorsqu'elles se produisent afin d'éviter les plantages du programme ou la corruption des données.

Quelle est la relation entre les appels récursifs et la gestion des exceptions dans les fonctions Java ? Quelle est la relation entre les appels récursifs et la gestion des exceptions dans les fonctions Java ? May 03, 2024 pm 06:12 PM

Gestion des exceptions dans les appels récursifs : Limitation de la profondeur de récursion : Empêcher le débordement de pile. Utiliser la gestion des exceptions : utilisez les instructions try-catch pour gérer les exceptions. Optimisation de la récursivité de queue : évitez le débordement de pile.

Comment la gestion des exceptions C++ prend-elle en charge les routines de gestion des erreurs personnalisées ? Comment la gestion des exceptions C++ prend-elle en charge les routines de gestion des erreurs personnalisées ? Jun 05, 2024 pm 12:13 PM

La gestion des exceptions C++ permet la création de routines de gestion des erreurs personnalisées pour gérer les erreurs d'exécution en lançant des exceptions et en les interceptant à l'aide de blocs try-catch. 1. Créez une classe d'exception personnalisée dérivée de la classe d'exception et remplacez la méthode what() ; 2. Utilisez le mot-clé throw pour lancer une exception ; 3. Utilisez le bloc try-catch pour intercepter les exceptions et spécifier les types d'exception qui peuvent être générés. manipulé.

Comment gérer les exceptions dans les expressions C++ Lambda ? Comment gérer les exceptions dans les expressions C++ Lambda ? Jun 03, 2024 pm 03:01 PM

La gestion des exceptions dans les expressions C++ Lambda n'a pas sa propre portée et les exceptions ne sont pas interceptées par défaut. Pour intercepter les exceptions, vous pouvez utiliser la syntaxe de capture d'expression Lambda, qui permet à une expression Lambda de capturer une variable dans sa portée de définition, permettant ainsi la gestion des exceptions dans un bloc try-catch.

Gestion des exceptions en technologie C++ : Comment gérer correctement les exceptions dans un environnement multithread ? Gestion des exceptions en technologie C++ : Comment gérer correctement les exceptions dans un environnement multithread ? May 09, 2024 pm 12:36 PM

En C++ multithread, la gestion des exceptions suit les principes suivants : rapidité, sécurité des threads et clarté. En pratique, vous pouvez garantir la sécurité des threads du code de gestion des exceptions en utilisant des variables mutex ou atomiques. En outre, pensez à la réentrance, aux performances et aux tests de votre code de gestion des exceptions pour vous assurer qu'il s'exécute en toute sécurité et efficacement dans un environnement multithread.

Gestion des exceptions PHP : comprendre le comportement du système grâce au suivi des exceptions Gestion des exceptions PHP : comprendre le comportement du système grâce au suivi des exceptions Jun 05, 2024 pm 07:57 PM

Gestion des exceptions PHP : comprendre le comportement du système grâce au suivi des exceptions. Les exceptions sont le mécanisme utilisé par PHP pour gérer les erreurs, et les exceptions sont gérées par des gestionnaires d'exceptions. La classe d'exception Exception représente les exceptions générales, tandis que la classe Throwable représente toutes les exceptions. Utilisez le mot-clé throw pour lancer des exceptions et utilisez les instructions try...catch pour définir les gestionnaires d'exceptions. Dans des cas pratiques, la gestion des exceptions est utilisée pour capturer et gérer DivisionByZeroError qui peut être générée par la fonction calculate() afin de garantir que l'application peut échouer correctement lorsqu'une erreur se produit.

Comment gérez-vous efficacement les exceptions en PHP (essayez, attrapez, enfin, jetez)? Comment gérez-vous efficacement les exceptions en PHP (essayez, attrapez, enfin, jetez)? Apr 05, 2025 am 12:03 AM

En PHP, la gestion des exceptions est réalisée grâce aux mots clés d'essai, de catch, enfin et de lancement. 1) Le bloc d'essai entoure le code qui peut lancer des exceptions; 2) Le bloc de capture gère les exceptions; 3) Enfin, Block garantit que le code est toujours exécuté; 4) Le lancer est utilisé pour lancer manuellement les exceptions. Ces mécanismes aident à améliorer la robustesse et la maintenabilité de votre code.

Routage ThinkPhp6: comment obtenir complètement des paramètres d'URL contenant des caractères spéciaux tels que le chinois? Routage ThinkPhp6: comment obtenir complètement des paramètres d'URL contenant des caractères spéciaux tels que le chinois? Apr 01, 2025 pm 02:51 PM

Les paramètres de routage ThinkPhp6 sont traités en chinois et acquisition complète. Dans le cadre ThinkPHP6, les paramètres d'URL contenant des caractères spéciaux (tels que les marques chinoises et ponctuation) sont souvent traités ...

See all articles