Les applications sont des (localisateurs de services (service locators). Elles hébergent un jeu composants appelés « composants d'application » qui procurent différents services pour la prise en charge des requêtes. Par exemple, le composant urlManager
(gestionnaire d'url) est chargé de router les requêtes Web vers les contrôleurs appropriés ; le composant db
(base de données) fournit les services relatifs à la base de données ; et ainsi de suite.
Chaque composant d'application possède un identifiant unique qui le distingue des autres composants d'application de la même application. Vous pouvez accéder à un composant d'application via l'expression :
\Yii::$app->componentID
Par exemple, vous pouvez utiliser \Yii::$app->db
pour obtenir la connexion à la base de données, et \Yii::$app->cache
pour accéder au cache primaire enregistré dans l'application.
Un composant d'application est créé la première fois qu'on veut y accéder en utilisant l'expression ci-dessus. Les accès ultérieurs retournent la même instance du composant.
Les composants d'application peuvent être n'importe quel objet. Vous pouvez les enregistrer en configurant la propriété yii\base\Application::$components dans la configuration de l'application.
Par exemple,
[
'components' => [
// enregistre le composant "cache" à partir du nom de classe
'cache' => 'yii\caching\ApcCache',
// enregistre le composant "db" à l'aide d'un tableau de configuration
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo',
'username' => 'root',
'password' => '',
],
// enregistre le composant "search" en utilisant une fonction anonyme
'search' => function () {
return new app\components\SolrService;
},
],
]
Info : bien que vous puissiez enregistrer autant de composants d'application que vous le désirez, vous devriez le faire avec discernement. Les composants d'application sont comme les variables globales, une utilisation trop importante de composants d'application est susceptible de rendre votre code plus difficile à tester et à maintenir. Dans beaucoup de cas, vous pouvez simplement créer un composant localement et l'utiliser lorsque vous en avez besoin.
Comme il a été dit plus haut, un composant d'application n'est instancié que lorsqu'on y accède pour la première fois. S'il n'est pas du tout accédé dans le traitement de la requête, il n'est pas instancié. Parfois, vous désirez peut être instancier un composant d'application pour chacune des requêtes, même s'il n'est pas explicitement accédé. Pour cela, vous pouvez lister son identifiant (ID) dans la propriété bootstrap de l'application.
Vous pouvez également utiliser des « Closures » (Fermetures) pour amorcer des composants personnalisés. Il n'est pas nécessaire de retourner une instance de composant. Une « Closure » peut également être utilisée pour exécuter du code après l'instanciation de yii\base\Application.
Par exemple, la configuration d'application suivante garantit que le composant log
est toujours chargé.
[
'bootstrap' => [
'log',
function($app){
return new ComponentX();
},
function($app){
// some code
return;
}
],
'components' => [
'log' => [
// configuration le composant "log"
],
],
]
Yii définit un jeu de composants d'application dit core application components (composants d'application du noyau ou du cœur) avec des identifiants fixés et des configurations par défaut. Par exemple, le composant request (requête) est utilisé pour collecter les informations sur une requête utilisateur et la résoudre en une route; le composant db (base de données) représente une connexion à une base de données à l'aide de laquelle vous pouvez effectuer des requêtes de base de données. C'est à l'aide des ces composants d'application du noyau que les applications Yii sont en mesure de prendre en charge les requêtes des utilisateurs.
Vous trouverez ci-après la liste des composants d'application prédéfinis du noyau. Vous pouvez les configurer et les personnaliser comme tout composant d'application. Lorsque vous configurez une composant d'application du noyau, vous n'avez pas besoin de spécifier sa classe, celle par défaut est utilisée.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.