Maison > développement back-end > tutoriel php > analyse du cycle de vie des demandes d'application du cadre thinkPHP5.0

analyse du cycle de vie des demandes d'application du cadre thinkPHP5.0

不言
Libérer: 2023-03-25 13:08:01
original
1551 Les gens l'ont consulté

Cet article présente principalement le cycle de vie des demandes de l'application-cadre thinkPHP5.0 et analyse en détail les différents processus d'exécution impliqués dans le cycle de vie des demandes de l'application-cadre thinkPHP5.0. Les amis dans le besoin peuvent s'y référer

. Les exemples de cet article décrivent le cycle de vie des demandes d'application du framework thinkPHP5.0. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Dans cet article, nous donnerons une introduction générale au cycle de vie des requêtes d'application dans ThinkPHP5.0, afin que les développeurs puissent comprendre l'intégralité de l'exécution. processus.

1. Fichier d'entrée

Les requêtes initiées par les utilisateurs passeront par le fichier d'entrée de l'application, généralement le fichier public/index.php. Bien entendu, vous pouvez également modifier ou ajouter de nouveaux fichiers d'entrée.

Habituellement, le code du fichier d'entrée est relativement simple. Un code de fichier d'entrée courant est le suivant :

// 应用入口文件
// 定义项目路径
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
Copier après la connexion

Fichiers d'entrée généraux. avoir quelques définitions Les constantes sont les principales. Pour les constantes prises en charge, veuillez vous référer au contenu ou à l'annexe suivante.

De manière générale, nous déconseillons d'ajouter trop de code au fichier d'entrée de l'application, en particulier le code lié à la logique métier.

2. Fichier de démarrage

L'étape suivante est le fichier de démarrage du framework d'exécution. Le fichier start.php est le fichier de démarrage par défaut du système. Dans le fichier de démarrage, les opérations suivantes seront effectuées dans l'ordre :

① Charger les définitions de constantes du système ;
② Charger les fichiers de définition de variables d'environnement
③ Enregistrez le mécanisme de chargement automatique ; 🎜>④ Enregistrez le mécanisme de gestion des erreurs et des exceptions ;
⑤ Chargez le fichier de configuration personnalisé
⑥ Exécutez l'application

Si le fichier de démarrage par défaut est modifié dans le fichier d'entrée de votre application, le processus d'exécution ci-dessus. Des modifications peuvent suivre.

3. Inscrivez-vous au chargement automatique

Le système appellera la méthode Loader::register() pour s'inscrire au chargement automatique. Une fois cette étape terminée, toutes les classes. les bibliothèques conformes à la spécification (y compris les bibliothèques de classes tierces dont Composer dépend du chargement) seront chargées automatiquement.

Le chargement automatique du système se compose de deux parties :

① La méthode de chargement automatique du système d'enregistrement thinkLoader::autoload② La définition de l'espace de noms du système d'enregistrement
③ Chargement du fichier de mappage de la bibliothèque de classes (s'il existe)
④ S'il y a une installation de Composer, enregistrez Composer pour le chargement automatique
⑤ Enregistrez le répertoire d'extension Extend

La détection de chargement automatique la séquence d'une bibliothèque de classes est :

① S'il faut définir le mappage de la bibliothèque de classes ; ② Détection de chargement automatique PSR-4
③ Détection de chargement automatique PSR-0 ; 🎜>
Vous pouvez le constater, la manière de définir le mappage des bibliothèques de classes est la plus efficace.

4. Enregistrez le mécanisme d'erreur et d'exception

Exécutez Error::register() pour enregistrer le mécanisme de gestion des erreurs et des exceptions.

se compose de trois parties :

① Méthode d'arrêt de l'application : thinkError::appShutdown<p>② Méthode de gestion des erreurs : thinkError::appError</p>③ Méthode de gestion des exceptions :

thinkError::appShutdown<br/>thinkError::appError<br/>L'enregistrement de la méthode d'arrêt de l'application vise à faciliter l'interception de certaines erreurs système. thinkError::appException

Pendant tout le cycle de vie d'une demande d'application, si une exception ou une erreur grave est générée, l'application se terminera prématurément et affichera des informations d'exception et d'erreur en réponse.

5. Initialisation de l'application

La première étape pour exécuter une application consiste à initialiser l'application, notamment :

Charger l'application ( public ) configuration ;

Charger la configuration de l'état de l'application ;

Charger la définition de l'alias ; Charger le fichier de configuration étendu (défini par extra_config_list); 🎜 >Chargez le fichier de fonction d'extension (défini par extra_file_list) ;
Définissez le fuseau horaire par défaut ;
Chargez le pack de langue du système



6. >

Une fois l'initialisation de l'application terminée, la détection de l'accès aux URL sera effectuée, y compris la détection de PATH_INFO et la détection du suffixe d'URL.

L'accès URL 5.0 doit être une adresse URL en mode PATH_INFO (y compris le mode compatible), par exemple :

http://serverName/index.php/index/index/hello / val/value

Donc, si votre environnement ne peut prendre en charge que l'accès normal aux paramètres d'URL, vous devez utiliser

http://serverName/index.php? /index/index/hello&val=value

Si le fichier d'entrée est accessible depuis la ligne de commande, la valeur normale peut être obtenue via

paramètres avant de continuer.

7. Détection d'itinéraire $php index.php index/index/hello/val/value...

Si le paramètre url_route_on est activé, la détection d'itinéraire URL sera effectuée en premier. $_SERVER[&#39;PATH_INFO&#39;]

Si un itinéraire correspondant est détecté, le planning URL correspondant sera enregistré en fonction de l'adresse de l'itinéraire définie.

L'adresse de routage de 5.0 prend en charge les méthodes suivantes :

routage vers le module/contrôleur/opération ;

routage vers une adresse de redirection externe

méthode de routage vers le contrôleur ;

Fonction d'itinéraire vers la fermeture ;

Méthode d'itinéraire vers la classe ;

L'adresse de routage peut être affectée par la liaison du nom de domaine.

Si le routage est désactivé ou si la détection de routage est invalide, le module/contrôleur/opération par défaut sera analysé et identifié.

如果在应用初始化的时候指定了应用调度方式,那么路由检测是可选的。

可以使用 \think\App::dispatch() 进行应用调度。

8、分发请求

在完成了URL检测和路由检测之后,路由器会分发请求到对应的路由地址,这也是应用请求的生命周期中最重要的一个环节。

在这一步骤中,完成应用的业务逻辑及数据返回。

建议统一使用return返回数据,而不是echo输出,如非必要,请不要执行exit中断。

直接echo输出的数据将无法进行自动转换响应输出的便利。

下面是系统支持的分发请求机制,可以根据情况选择:

模块/控制器/操作

这是默认的分发请求机制,系统会根据URL或者路由地址来判断当前请求的模块、控制器和操作名,并自动调用相应的访问控制器类,执行操作对应的方法。

该机制下面,首先会判断当前模块,并进行模块的初始化操作(和应用的初始化操作类似),模块的配置参数会覆盖应用的尚未生效的配置参数。

支持模块映射、URL参数绑定到方法,以及操作绑定到类等一些功能。

控制器方法

和前一种方式类似,只是无需判断模块、控制器和操作,直接分发请求到一个指定的控制器类的方法,因此没有进行模块的初始化操作。

外部重定向

可以直接分发请求到一个外部的重定向地址,支持指定重定向代码,默认为301重定向。

闭包函数

路由地址定义的时候可以直接采用闭包函数,完成一些相对简单的逻辑操作和输出。

类的方法

除了以上方式外,还支持分发请求到类的方法,包括:
静态方法:

&#39;blog/:id&#39;=>&#39;\org\util\Blog::read&#39;
Copier après la connexion


类的方法:

&#39;blog/:id&#39;=>&#39;\app\index\controller\Blog@read&#39;
Copier après la connexion

9、响应输出

控制器的所有操作方法都是return返回而不是直接输出,系统会调用Response::send方法将最终的应用返回的数据输出到页面或者客户端,并自动转换成default_return_type参数配置的格式。所以,应用执行的数据输出只需要返回一个正常的PHP数据即可。

10、应用结束

事实上,在应用的数据响应输出之后,应用并没真正的结束,系统会在应用输出或者中断后进行日志保存写入操作。

系统的日志包括用户调试输出的和系统自动生成的日志,统一会在应用结束的时候进行写入操作。

而日志的写入操作受日志初始化的影响。

相关推荐:

ThinkPHP框架中使用Memcached缓存数据的方法

thinkphp框架里用linux的crontab写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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal