0 follower

Application

L'application représente le contexte d'exécution de gestion des requêtes. Son rôle principal est de résoudre les requêtes utilisateurs et de les rediriger vers le contrôleur adéquat. Elle sert aussi à centraliser toutes les informations de configuration qui lui sont relatives. C'est pour cela que l'application peut aussi être appelée front-controller

L'application est un singleton créé par le script de démarrage. Le singleton peut être accédé de n'importe où en utilisant Yii::app().

1. Configuration de l'Application

Par défaut, l'application est une instance de CWebApplication. Pour la paramétrer, dans la plupart des cas, il suffit de fournir un fichier de configuration (ou un array) qui permet d'initialiser les valeurs des propriétés de l'instance à sa création. Lorsque le paramétrage par fichier de configuration est inadapté ou insuffisant, il est possible d'étendre directement CWebApplication.

La configuration est un tableau de paires clef-valeur où chaque clef représente le nom d'une propriété de l'instance de l'application et chaque valeur, la valeur à affecter lors de l'initialisation. Par exemple, la configuration suivante permet de paramétrer les propriétés name et defaultController d'une application.

array(
    'name'=>'Yii Framework',
    'defaultController'=>'site',
)

De façon générale, la configuration est stockée dans un script PHP séparé (par exemple protected/config/main.php) qui retourne le tableau de paramétrage.

return array(...);

Pour utiliser cette méthode de configuration, il suffit de passer le nom du fichier au constructeur de l'application ou à la méthode Yii::createWebApplication() comme dans l'exemple suivant, ce qui est fait la plupart du temps dans le script de démarrage:

$app=Yii::createWebApplication($configFile);

Astuce : si la configuration est très complexe, il est possible de la segmenter en plusieurs fichiers, chacun retournant une fraction du tableau de configuration. Ensuite, il ne reste qu'à assembler au sein du fichier de configuration général les différents segments (en utilisant la directive PHP include()).

2. Dossier de base de l'Application

Le dossier de base de l'application est le dossier racine qui contient tous les éléments sensibles de l'application (scripts PHP, données, ...). En standard, c'est le sous dossier protected qui se trouve à l'intérieur du dossier qui contient le script de démarrage. Ce dossier peut être changé en modifiant la propriété basePath dans le fichier de configuration de l'application.

Les utilisateurs Web ne doivent pas pouvoir accéder aux contenus de ce dossier. Cela peut être réalisé très simplement sur serveur Web Apache, en déposant dans le dossier à protéger un fichier .htaccess contenant

deny from all

3. Composant d'Application

Une application peut être aisément modifiée et enrichie de nouvelles fonctionnalités grâce à son architecture très souple basée sur des composants. En pratique, une application fédère une batterie de composants où chacun prend en charge une fonctionnalité spécifique. Par exemple, l'application résoud une requête utilisateur grâce aux composants CUrlManager et CHttpRequest.

Il est possible de paramétrer les propriétés de chacun des composants d'une application, Par exemple, il est possible de configurer le composant CMemCache pour qu'il utilise plusieurs serveurs de cache.

array(
    ......
    'components'=>array(
        ......
        'cache'=>array(
            'class'=>'CMemCache',
            'servers'=>array(
                array('host'=>'server1', 'port'=>11211, 'weight'=>60),
                array('host'=>'server2', 'port'=>11211, 'weight'=>40),
            ),
        ),
    ),
)

Dans la configuration ci-dessus, l'élément cache a été ajouté à la liste des components. Le sous-élément cache définit la classe de cache à utiliser, ici CMemCache et la liste des serveurs servers à utiliser avec leurs paramètres.

Pour accéder à un composant de l'application, il suffit d'effectuer l'appel Yii::app()->ComponentID, où ComponentID correspond à l'ID du composant. Pour l'exemple précédent, l'accès au composant cache se fait tout simplement par l'appel Yii::app()->cache.

Un composant peut être désactivé en forçant sa propriété enabled à false. Lors de l'accès à un composant qui a été désactivé, la valeur null est retournée.

Astuce : En standard, les composants de l'application sont créés à la demande. Cela signifie qu'un composant de l'application n'est pas instancié avant son utilisation, i.e. avant son accés. Cela permet de ne pas dégrader les performances de l'application même dans les cas où beaucoup de composants sont déclarés. Pour certains composants tels que le CLogRouter, il peut toutefois être nécessaire de les instancier dès le démarrage de l'application, même s'ils ne sont pas référencés explicitement pendant le cycle de vie de l'application. Pour ce faire, il suffit de les déclarer dans la section preload du paramétrage de l'application.

4. Composants du noyau de l'application

Par défaut, Yii prédéfini les propriétés de toute une série de composants communs aux applications Web. C'est, par exemple, le cas du composant request chargé de gérer les requêtes utilisateur. En paramétrant ces composants, il est possible d'adapter quasiment tous les aspects du comportement de Yii.

Voici une liste des composants du noyau pré-déclarés par CWebApplication.

5. Cycle de vie d'une Application

Lors de la prise en charge d'une requête, l'application passe par les étapes suivantes :

  1. Pré-initialisation de l'application via CApplication::preinit();

  2. Mise en place de l'autoloader et de la gestion des erreurs;

  3. Chargement des composants du noyau;

  4. Chargement de la configuration de l'application;

  5. Initialisation de l'application avec CApplication::init()

    • Enregistrement des "comportements" de l'application;
    • Chargement des composants statiques;
  6. Levée de l’événement onBeginRequest;

  7. Traitement de la requête utilisateur:

    • Résolution de la requête;
    • Création du contrôleur;
    • Exécution du contrôleur;
  8. Levée de l’événement onEndRequest;

Found a typo or you think this page needs improvement?
Edit it on github !