Jan
13

Configuration de Yii

Voici la traduction du troisième épisode de la série de Larry Ullman Apprendre le Yii Framework.

Cet article détaille le contenu du fichier de configuration général de Yii.

L’article original en anglais (Configuring Yii) est consultable sur le site de l’auteur : www.LarryUllman.com.

Voici le troisième article de ma série consacrée à Yii, mon framework PHP favori. Dans le premier article, j’ai traité du téléchargement et de l’installation du framework. Dans le deuxième, nous avons vu comment créer une application Web basique. A la fin de ce précédent article, nous avons également étudié la structure des fichiers et dossiers dans le répertoire de l’application. A mesure que vous avancerez avec Yii, cette architecture devrait vous paraître de plus en plus familière. Dans le présent article, j’aborderai la façon dont vous pourrez configurer votre application basée sur Yii, à travers la gestion des erreurs, l’ajout de composants et la connexion à une base de données. Cet article requiert donc que vous disposiez d’une application existante comme base de travail ;  dans le cas contraire, suivez les étapes des précédents articles.

Vous pouvez configurer le comportement de votre application Yii de différentes manières. L’essentiel de ces modification sera effectué dans le fichier protected/config/main.php, mais avant d’aller plus loin, je vais vous parler du fichier index.php, créé à la racine du dossier qui contient votre application. Il s’agit en fait d’un fichier d’amorçage (bootstrap file), ce qui signifie que toutes les interactions avec le site transitent par lui. Par exemple, afficher un employé de la base de données pourra se faire à travers l’URL www.example.com/index.php/employee/show/id/34, et la modification d’un service pourra nécessiter de soumettre un formulaire à l’adresse www.example.com/index.php/department/update/id/3. Ces deux adresses font appel à un seul script : index.php.

Le fichier index.php est généré lorsque vous utilisez le script yiic dans la ligne commande. Il n’y a que sept lignes de code non commenté dans ce fichier. La première d’entre elles indique l’endroit où se trouve le Yii Framework :

$yii=dirname(__FILE__).'/../framework/yii.php';

Le chemin est en principe toujours correct (car il est généré lorsque vous avez utilisé le framework pour créer votre application), mais vous pouvez en changer la valeur si vous souhaitez déplacer le dossier framework ou le fichier index.

La deuxième ligne permet de connaître l’emplacement du fichier de configuration

$config=dirname(__FILE__).'/protected/config/main.php';

Par défaut, le dossier protected, où se trouvent tous les fichiers de l’application, se trouve dans le même répertoire que le fichier index. Personnellement, je préfère déplacer ce dossier en dehors de la racine du serveur Web, comme dans l’illustration suivante :

Disposition des dossiers modifiée

Dans ce cas, j’ai modifié mon fichier index.php de la façon suivante :

$config= '../protected/config/main.php';

Notez qu’il est raisonnable de modifier l’emplacement des fichiers de l’application (c’est-à-dire le dossier protected), mais vous ne devez pas changer les noms des fichiers ou la structure des dossiers à l’intérieur du répertoire protected.

Astuce : Déplacer le dossier protected en dehors de la racine du site est juste une précaution de plus. Cela n’est pas indispensable, et vous pouvez tout à fait laisser le dossier à son emplacement d’origine, spécialement si vous débutez tout juste.

La ligne suivante active le mode de débogage :

defined('YII_DEBUG') or define('YII_DEBUG',true);

Vous aurez besoin d’activer le débogage en cours de développement du site. En revanche, vous devrez le désactiver une fois le site en production. Pour désactiver le débogage, supprimez ou commentez cette ligne. Habituellement, je la commente juste, pour pouvoir la réactiver plus tard. Vous pouvez également modifier la ligne comme suit, pour activer le débogage d’une page à la volée :

if (isset($_GET['debug'])) define('YII_DEBUG', true);

Pour déboguer votre page à la volée, vous devrez alors changer l’URL, par exemple www.example.com/index.php/site/contact deviendra www.example.com/index.php/site/contact/debug/true.

La ligne de code suivante définit le nombre de niveaux de la pile d’appels à afficher dans les logs :

defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);

La pile d’appels est un historique permettant de savoir quels fichiers, fonction, etc. sont inclus, appelés et ainsi de suite. Avec un framework, le simple chargement de la page d’accueil peut facilement impliquer une douzaine d’actions. Afin de limiter les données enregistrés dans les logs aux informations les plus récentes et les plus utiles, la pile d’appels est limitée aux trois actions les plus récentes par cette ligne.

Les deux dernières lignes du fichier d’amorçage (boostrap file) incluent le framework et démarrent l’application. Ne jouez pas avec elles !

require_once($yii);
Yii::createWebApplication($config)->run();

Et c’est vraiment tout ce qu’on trouve dans le fichier index.php. Depuis la version 1.1 de Yii, le framework crée un second fichier d’amorçage : index-test.php. Ce fichier est rigoureusement le même que index.php, sauf qu’il inclut un fichier de configuration différent : /protected/config/test.php à la place de /protected/config/main.php. Cependant, le fichier de configuration de test inclut juste le fichier de configuration principal et charge ensuite le composant CDbFixtureManager, qui est utilisé dans les tests unitaires. Le fichier index-test.php omets également la directive de limitation de la pile d’appels.

L’essentiel de la configuration se déroule dans le fichier de configuration main.php., que vous trouvez dans le dossier /protected/config (cf. illustration précédente). Vous trouverez également un fichier de configuration console.php, mais celui-ci est destiné à la version en ligne de commande de votre application. Je ne vais pas aborder ce sujet ici, mais sachez que vous devrez l’éditer si vous associez des scripts en ligne de commande à votre application.

Le fichier de configuration retourne un tableau multidimensionnel d’informations, dont une partie est prédéfinie. Vous devez faire attention au respect de la syntaxe lorsque vous éditerez ce fichier, en veillant à fermer vos parenthèses et à ajouter des virgules lorsque c’est nécessaire.

Pour commencer, vous voulez certainement changer le nom de votre application, qui est utilisé dans la mise en page HTML par défaut, dans le titre des pages, etc. :

'name'=>'Site Yii Carrément Cool',

Ensuite, dans la section modules du tableau, vous devez activer Gii. Gii est un outil accessible via une interface Web que vous utiliserez pour générer les Modèles, les Vues et les Contrôleurs de l’application. Pour activer Gii, retirez simplement les tags de commentaire /* et */ qui entourent ce code :

'gii'=>array(
    'class'=>'system.gii.GiiModule',
    'password'=>'SECURE',
),

Pensez également à saisir dans le code un mot de passe sécurisé que vous seul connaissez.

Astuce : Gii a été ajouté à Yii dans la version 1.1.2, et remplace [1] des fonctionnalités disponibles dans les utilitaires de Yii en ligne de commande.

Si l’on se déplace plus bas dans le fichier, dans la section components du tableau, vous voudrez probablement activer urlManager. Enlevez simplement les commentaires qui entourent le code suivant :

'urlManager'=>array(
    'urlFormat'=>'path',
    'rules'=>array(
        '/'=>'/view',
        '//'=>'/',
        '/'=>'/',
    ),
),

Ce composant modifie les URL pour les rendre plus lisibles pour les utilisateurs et les moteurs de recherche. Par exemple, l’URL par défaut d’une page pourrait être quelque chose comme www.example.com/index.php?r=site/contact, mais l’urlManager transformera ça en www.example.com/index.php/site/contact. Si vous voulez aller plus loin, sachez qu’il est possible de configurer urlManager, ainsi que le fichier Apache .htaccess pour que index.php ne fasse plus partie de l’URL.

Pour la plupart de vos projets, vous aurez besoin d’établir une connexion à la base de données (sauf si vous n’en utilisez pas, bien sûr). Pour ce faire, vous devez remplir un tableau avec la chaîne de connexion (connection String), le nom d’utilisateur et le mot de passe. Par défaut, la chaîne de connexion est définie pour la base de données SQLite :

'db'=>array(
    'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
),

Si vous utilisez SQLite, modifiez simplement le code pour qu’il indique l’emplacement de votre base de données SQLite. Si vous n’utilisez pas SQLite, commentez ces trois lignes de code.

Si vous souhaitez utiliser MySQL, le code qui convient est le suivant :

'db'=>array(
    'connectionString' => 'mysql:host=localhost;dbname=testdrive',
    'emulatePrepare' => true,
    'username' => 'username',
    'password' => 'password',
    'charset' => 'utf8',
),

La chaîne de connexion est un DSN (Database Source Name) doit correspondre à un format bien précis. Elle commence avec un mot clé indiquant le système de base de données à utiliser, comme mysql, pgsql, (PostgreSQL), mssql (Microsoft SQL Server) or oci (Oracle). Ce mot clé est suivi de deux points, puis, en fonction du système de base de données utilisé et de l’environnement du serveur, d’un certain nombre de paramètres, séparés par des points-virgules :

mysql:host=localhost;dbname=test
mysql:port=8889;dbname=somedb
mysql:unix_socket=/chemin/vers/le/mysql.sock;dbname=whatever

Spécifier le type de base de données est l’élément le plus important. En ce qui me concerne, puisque j’utilise MAMP sur Mac OS X, j’ai dû spécifier le numéro du port à utiliser pour MySQL, car il ne s’agissait pas du port par défaut (3306). Sur Mac OS X Server, j’ai dû spécifier le socket, car l’emplacement par défaut habituel n’était pas celui utilisé dans mon cas. Gardez également à l’esprit que vous devez installer toutes les extensions nécessaires en fonction de votre système de base de données, comme PDO et PDO MySQL. Vous devez évidemment modifier le code du fichier de configuration pour y indiquer le nom d’utilisateur et le mot de passe permettant d’accéder à votre base de données. Vous avez également la possibilité de modifier l’encodage des caractères (charset), mais cela n’est pas obligatoire[2].

Dans la section log des composants, j’active CWebLogRoute. C’est un outil de débogage extrêmement utile qui permet d’obtenir une tonne d’informations sur chaque page affichée. Voici le code du fichier de configuration :

'log'=>array(
    'class'=>'CLogRouter',
    'routes'=>array(
        array(
            'class'=>'CFileLogRoute',
            'levels'=>'error, warning',
        ),
        array (
            'class' => 'CWebLogRoute'
        )
    ),
),

Et voici un exemple de ce qu’affiche cet outil :

affichage de CWebLogRoute

Pour terminer, vers la fin du fichier de configuration, vous devez trouver le paramètre adminEmail. Modifiez-le en indiquant votre adresse mail afin de recevoir les rapports d’erreurs, les formulaires de contact, …

'params'=>array(
    'adminEmail'=>'adresse@votreDomaine.tld',
),

Comme vous le constatez, une grande partie de la configuration consiste à modifier et ajouter des composants. Ceux dont j’ai parlé sont d’après moi les plus importants pour commencer, mais il y en a sans doute d’autres, concernant la gestion du cache, la sécurité, les thèmes, et plus encore. Ce qui est appréciable dans Yii, c’est que ces composants ne seront pas chargés systématiquement pour chaque requête. Certains, comme le composant log, le sont[3], mais les autres seront chargés uniquement en cas de besoin, minimisant ainsi l’impact sur les performances qu’aurait le chargement de nombreux composants.

Un autre paramètre qui figurait dans le fichier de configuration par défaut, mais qui doit désormais être ajouté permet d’indiquer le contrôleur par défaut. Cela signifie que si aucun contrôleur n’est spécifié dans l’URL, quel sera le contrôleur appelé ? Si vous ne modifiez pas le fichier de configuration, c’est le contrôleur « site » qui sera celui par défaut. Pour choisir un contrôleur différent, ajoutez :

'defaultController' => 'login',

Je précise que cette ligne de code ne fonctionnera pas chez vous directement, car seul le contrôleur « site » existe par défaut. En revanche, vous pourriez effectuer cette modification si vous aviez créé le fichier /protected/controllers/LoginController.php (ou bien n’importe quel contrôleur du moment que le fichier existe et que vous en faites le contrôleur par défaut). Notez également que si vous souhaitez ajouter cette ligne de code, vous devez le faite en tant qu’élément de premier niveau dans le tableau retourné par le fichier de configuration (c’est-à-dire qu’il ne doit pas être placé dans une autre section ; le plus simple est de l’ajouter entre les éléments « basePath » et « name », pour plus de clarté).

Voici donc une introduction rapide à la configuration de votre application Yii.

Larry et moi vous remercions comme d’habitude pour l’intérêt que vous portez à cette série d’articles. N’hésitez pas à laisser vos commentaires ou à poser vos questions si vous en avez (utilisez pour cela le formulaire de commentaire de cet article ou bien le formulaire de contact du site).

Je vous rappelle que l’article original en anglais (Configuring Yii) est consultable sur le site de l’auteur : www.LarryUllman.com.

Chapitre suivant : Définir une base de données pour notre application Yii »

  1. [1] NDT : en réalité, Gii ne remplace pas vraiment la ligne de commande, mais propose une autre interface pour réaliser les mêmes tâches. Vous pouvez créer vos modèles, vues et contrôleurs en ligne de commande si vous le souhaitez.
  2. [2] NDT : je vous conseillerais d’ailleurs d’utiliser UTF-8 comme encodage de vos fichiers et de votre base de données, cela vous évitera des désagréments ultérieurs
  3. [3] NDT : log est toujours chargé car il est déclaré dans la section preload du fichier de configuration


8 Comments to “Configuration de Yii”

  • What is Larry Thinking? #36 => Becoming a Better Programmer and More! – Larry Ullman 1 février 2011 à 15 h 46 min

    […] Configuring Yii […]

  • franklinovic 7 avril 2011 à 13 h 29 min

    Dans un Benchmark de frameworks pour le développement php, j’ai choisi yii. A la recherche donc d’un tuto en francais sur ce framework, je suis tombé en premier sur vos articles que je trouve parfaitement traduit et tres bien organisé pour un débutant comme moi.

    J’aime bien ces articles

  • Yii Framework 17 juin 2011 à 16 h 57 min
  • Touhami 22 janvier 2012 à 19 h 59 min

    super, et claire, merci au suivant

  • stecka9 13 février 2012 à 11 h 11 min

    salut, premièrement je vous remercie pour tous ces efforts que vous effectuez pour nous éclairer sur ce framework.
    j’ai une question si vous me permettez
    où je peux trouver les autres composants que je peux ajouter comme (le cache …..)?

  • Nico 16 février 2012 à 15 h 22 min

    Merci pour ces compliments.
    Concernant les composants, si je puis me permettre, tu n’as pas dû chercher trop longtemps.
    Sur le site officiel, il y a une rubrique regroupant les extensions du framework Yii. Tu peux filtrer les résultats via une recherche ou bien via le menu de droite. Voici, par exemple, les extensions Yii relatives au cache.

  • abistyle 28 août 2012 à 13 h 02 min

    Interessant!…jsp plus à la suivante

  • Comte 30 avril 2014 à 9 h 48 min

    Bonjour et merci pour cet article très clair. Une remarque toutefois uniquement sur la forme, on trouve un peu partout des > qui correspondent sans doute à un remplacement automatique d’un editeur. Mais dans les balise il n’est pas nécessaire de décrire les caractères spéciaux à l’aide de leur code html mais il suffit de les ecrire.
    Bonne continuation et merci

Poster un commentaire

Edito

Bienvenue sur Mémorandom.

Mémorandom est le blog de 2 développeurs web, Appo et Nico.

Vous y trouverez des informations sur différents domaines touchant de près ou de loin au développement web

Tutoriels Yii Framework

Nos derniers articles

Blogs Dev

Liens

Étiquettes