Les extensions sont des paquets logiciels distribuables, spĂ©cialement conçus pour ĂȘtre utilisĂ©s dans des applications, et qui procurent des fonctionnalitĂ©s prĂȘtes Ă l'emploi. Par exemple, l'extension yiisoft/yii2-debug ajoute une barre de dĂ©bogage trĂšs pratique au pied de chaque page dans votre application pour vous aider Ă comprendre plus aisĂ©ment comment les pages sont gĂ©nĂ©rĂ©es. Vous pouvez utiliser des extensions pour accĂ©lĂ©rer votre processus de dĂ©veloppement. Vous pouvez aussi empaqueter votre code sous forme d'extensions pour partager votre travail avec d'autres personnes.
Info : nous utilisons le terme "extension" pour faire rĂ©fĂ©rence Ă des paquets logiciels spĂ©cifiques Ă Yii. Quant aux paquets Ă but plus gĂ©nĂ©ral, qui peuvent ĂȘtre utilisĂ©s en dehors de Yii, nous y faisons rĂ©fĂ©rence en utilisant les termes « paquet » ou « bibliothĂšque ».
Pour utiliser une extension, vous devez d'abord l'installer. La plupart des extensions sont distribuĂ©es en tant que paquets Composer qui peuvent ĂȘtre installĂ©s en suivant les deux Ă©tapes suivantes :
composer.json de votre application et spécifier quelles extensions (paquets Composer) vous désirez installer.composer install pour installer les extensions spécifiées.Notez que devez installer Composer si vous ne l'avez pas déjà fait.
Par dĂ©faut, Composer installe les paquets enregistrĂ©s sur Packagist â le plus grand dĂ©pĂŽt pour les paquets Composer Open Source. Vous pouvez rechercher des extensions sur Packagist. Vous pouvez aussi crĂ©er votre propre dĂ©pĂŽt et configurer Composer pour l'utiliser. Ceci est utile si vous dĂ©veloppez des extensions privĂ©es que vous ne voulez partager que dans vos propres projets seulement.
Les extensions installĂ©es par Composer sont stockĂ©es dans le dossier BasePath/vendor, oĂč BasePath fait rĂ©fĂ©rence au chemin de base de l'application. Comme Composer est un gestionnaire de dĂ©pendances, quand il installe un paquet, il installe aussi automatiquement tous les paquets dont le paquet dĂ©pend.
Par exemple, pour installer l'extension yiisoft/yii2-imagine, modifier votre fichier composer.json comme indiqué ci-aprÚs :
{
// ...
"require": {
// ... autres dépendances
"yiisoft/yii2-imagine": "~2.0.0"
}
}
AprÚs l'installation, vous devriez apercevoir le dossier yiisoft/yii2-imagine dans le dossier BasePath/vendor. Vous devriez également apercevoir un autre dossier imagine/imagine contenant les paquets dont l'extension dépend et qui ont été installés.
Info : l'extension
yiisoft/yii2-imagineest une extension du noyau dĂ©veloppĂ©e et maintenue par l'Ă©quipe de dĂ©veloppement de Yii. Toutes les extensions du noyau sont hĂ©bergĂ©es sur Packagist et nommĂ©es selon le formatyiisoft/yii2-xyz, oĂčxyzvarie selon l'extension.
Vous pouvez désormais utiliser les extensions installées comme si elles faisaient partie de votre application. L'exemple suivant montre comment vous pouvez utiliser la classe yii\imagine\Image que l'extension yiisoft/yii2-imagine fournit :
use Yii;
use yii\imagine\Image;
// generate a thumbnail image
Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)
->save(Yii::getAlias('@runtime/thumb-test-image.jpg'), ['quality' => 50]);
Info : les classes d'extension sont chargées automatiquement par la classe de chargement automatique de Yii (autoloader).
Dans quelques cas rares, vous désirez installer quelques, ou toutes les, extensions manuellement, plutÎt que de vous en remettre à Composer. Pour le faire, vous devez :
vendor.Si une extension ne possÚde pas de classe autoloader mais obéit à la norme PSR-4, vous pouvez utiliser la classe autoloader procurée par Yii pour charger automatiquement les classes d'extension. Tout ce que vous avez à faire, c'est de déclarer un alias racine pour le dossier racine de l'extension. Par exemple, en supposant que vous avez installé une extension dans le dossier vendor/mycompany/myext, et que les classes d'extension sont sous l'espace de noms myext, alors vous pouvez inclure le code suivant dans la configuration de votre application :
[
'aliases' => [
'@myext' => '@vendor/mycompany/myext',
],
]
Vous pouvez envisager de créer une extension lorsque vous ressentez l'envie de partager votre code avec d'autres personnes. Une extension pour contenir n'importe quel code à votre goût, comme une classe d'aide, un objet graphique, un module, etc.
Il est recommandĂ© de crĂ©er une extension sous la forme d'un paquet Composer de façon Ă ce qu'elle puisse ĂȘtre installĂ©e facilement par d'autres utilisateurs, comme nous l'avons expliquĂ© dans la sous-section prĂ©cĂ©dente.
Ci-dessous, nous présentons les étapes de base à suivre pour créer une extension en tant que paquet Composer.
composer.json comme le rĂ©clame Composer. Reportez-vous Ă la sous-section suivante pour plus de dĂ©tails.composer.json ¶Tout paquet Composer doit disposer d'un fichier composer.json dans son dossier racine. Ce fichier contient les mĂ©ta-donnĂ©es Ă propos du paquet. Vous pouvez trouver une spĂ©cification complĂšte de ce fichier dans le manuel de Composer.
L'exemple suivant montre le fichier composer.json de l'extension yiisoft/yii2-imagine :
{
// package name (nom du paquet)
"name": "yiisoft/yii2-imagine",
// package type (type du paquet)
"type": "yii2-extension",
"description": "l'intégration d'Imagine pour le framework Yii ",
"keywords": ["yii2", "imagine", "image", "helper"],
"license": "BSD-3-Clause",
"support": {
"issues": "https://github.com/yiisoft/yii2/issues?labels=ext%3Aimagine",
"forum": "https://forum.yiiframework.com/",
"wiki": "https://www.yiiframework.com/wiki/",
"irc": "ircs://irc.libera.chat:6697/yii",
"source": "https://github.com/yiisoft/yii2"
},
"authors": [
{
"name": "Antonio Ramirez",
"email": "amigo.cobos@gmail.com"
}
],
// dépendances du paquet
"require": {
"yiisoft/yii2": "~2.0.0",
"imagine/imagine": "v0.5.0"
},
// class autoloading specs
"autoload": {
"psr-4": {
"yii\\imagine\\": ""
}
}
}
Chaque paquet Composer doit avoir un nom de paquet qui le distingue des autres paquets. Le format d'un nom de paquet est vendorName/projectName. Par exemple, dans le nom de paquet yiisoft/yii2-imagine, le nom de vendeur et le nom du projet sont, respectivement, yiisoft etyii2-imagine.
N'utilisez PAS yiisoft comme nom de vendeur car il est réservé pour le noyau de Yii.
Nous recommandons que vous préfixiez votre nom de projet par yii2- pour les paquets qui sont des extensions de Yii, par exemple,myname/yii2-mywidget. Cela permet aux utilisateurs de distinguer plus facilement les extensions de Yii 2.
Il est important de spĂ©cifier le type de paquet de votre extension comme yii2-extension afin que le paquet puisse ĂȘtre reconnu comme une extension de Yii lors de son installation.
Losqu'un utilisateur exécute composer install pour installer une extension, le fichier vendor/yiisoft/extensions.php est automatiquement mis à jour pour inclure les informations sur la nouvelle extension. Grùce à ce fichier, les application Yii peuvent connaßtre quelles extensions sont installées (l'information est accessible via yii\base\Application::$extensions).
Bien sûr, votre extension dépend de Yii. C'est pourquoi, vous devez lister (yiisoft/yii2) dans l'entrée require dans composer.json. Si votre extension dépend aussi d'autres extensions ou bibliothÚques de tierces parties, vous devez les lister également. Assurez-vous que vous de lister également les contraintes de versions appropriées (p. ex. 1.*, @stable) pour chacun des paquets dont votre extension dépend. Utilisez des dépendances stables lorsque votre extension est publiée dans une version stable.
La plupart des paquets JavaScript/CSS sont gérés par Bower et/ou NPM,
plutÎt que par Composer. Yii utilise le [greffon assets de Composer(https://github.com/fxpio/composer-asset-plugin) pour activer la gestion de ce genre de paquets par Composer. Si votre extension dépend d'un paquet Bower, vous pouvez simplement lister la dépendance dans composer.json comme ceci :
{
// paquets dépendances
"require": {
"bower-asset/jquery": ">=1.11.*"
}
}
Le code ci-dessus Ă©tablit que l'extension dĂ©pend de paquet Bower jquery. En gĂ©nĂ©ral, vous pouvez utiliser le nom bower-asset/PackageName â oĂč PackageName est le nom du paquet â pour faire rĂ©fĂ©rence Ă un paquet Bower dans composer.json, et utiliser npm-asset/PackageName pour faire rĂ©fĂ©rence Ă un paquet NPM. Quand Composer installe un paquet Bower ou NPM, par dĂ©faut, le contenu du paquet est installĂ© dans le dossier @vendor/bower/PackageName ou @vendor/npm/Packages, respectivement. On peut aussi faire rĂ©fĂ©rence Ă ces dossier en utilisant les alias plus courts @bower/PackageName et @npm/PackageName.
Pour plus de détails sur la gestion des ressources, reportez-vous à la section sur les Ressources.
Afin que vos classes soient chargées automatiquement par la classe autoloader de Yii ou celle de Composer, vous devez spécifier l'entrée autoload dans le fichier composer.json, comme précisé ci-aprÚs :
{
// ....
"autoload": {
"psr-4": {
"yii\\imagine\\": ""
}
}
}
Vous pouvez lister un ou plusieurs espaces de noms racines et leur chemin de fichier correspondant.
Lorsque l'extension est installée dans une application, Yii crée un alias pour chacun des espaces de noms racines. Cet alias fait référence au dossier correspondant à l'espace de noms. Par exemple, la déclaration autoload ci-dessus correspond à un alias nommé @yii/imagine.
Parce que les extensions sont prĂ©vues pour ĂȘtre utilisĂ©es par d'autres personnes, vous avez souvent besoin de faire un effort supplĂ©mentaire pendant le dĂ©veloppement. Ci-dessous nous introduisons quelques pratiques courantes et recommandĂ©es pour crĂ©er des extensions de haute qualitĂ©.
Pour éviter les collisions de noms et rendre le chargement des classes de votre extension automatique, vous devez utiliser des espaces de noms et nommer les classes de votre extension en respectant la norme PSR-4 ou la norme PSR-0.
Vos noms de classe doivent commencer par vendorName\extensionName, oĂč extensionName est similaire au nom du projet dans le nom du paquet sauf qu'il doit contenir le prĂ©fixe yii2-. Par exemple, pour l'extension yiisoft/yii2-imagine, nous utilisons l'espace de noms yii\imagine pour ses classes.
N'utilisez pas yii, yii2 ou yiisoft en tant que nom de vendeur. Ces noms sont réservés au code du noyau de Yii.
Parfois, vous désirez que votre extension exécute un certain code durant le processus d'amorçage d'une application. Par exemple, votre extension peut vouloir répondre à l'événement beginRequest pour ajuster quelques réglages d'environnement. Bien que vous puissiez donner des instructions aux utilisateurs de l'extension pour qu'ils attachent explicitement votre gestionnaire d'événement dans l'extension à l'événement beginRequest, c'est mieux de le faire automatiquement.
Pour ce faire, vous pouvez créer une classe dite classe du processus d'amorçage en implémentant l'interface yii\base\BootstrapInterface. Par exemple :
namespace myname\mywidget;
use yii\base\BootstrapInterface;
use yii\base\Application;
class MyBootstrapClass implements BootstrapInterface
{
public function bootstrap($app)
{
$app->on(Application::EVENT_BEFORE_REQUEST, function () {
// do something here
});
}
}
ensuite, listez cette classe dans le fichier composer.json de votre extension de cette maniÚre :
{
// ...
"extra": {
"bootstrap": "myname\\mywidget\\MyBootstrapClass"
}
}
Lorsque l'extension est installĂ©e dans l'application, Yii instancie automatiquement la classe d'amorçage et appelle sa mĂ©thode bootstrap() durant le processus de dĂ©marrage pour chacune des requĂȘtes.
Votre extension peut avoir besoin d'accéder à des bases de données. Ne partez pas du principe que les applications qui utilisent votre extension utilisent toujours Yii::$db en tant que connexion à la base de données. Déclarez plutÎt une propriété db pour les classes qui requiÚrent un accÚs à une base de données. Cette propriété permettra aux utilisateurs de votre extension de personnaliser la connexion qu'ils souhaitent que votre extension utilise. Pour un exemple, reportez-vous à la classe yii\caching\DbCache et voyez comment elle déclare et utilise la propriétédb.
Si votre extension a besoin de créer des tables de base de données spécifiques, ou de faire des changements dans le schéma de la base de données, vous devez :
Si votre extension est un objet graphique ou un module, il est probable qu'elle ait besoin de quelques ressources pour fonctionner. Par exemple, un module peut afficher quelques pages qui contiennent des images, du code JavaScript et/ou CSS. Comme les fichiers d'une extension sont tous dans le mĂȘme dossier, qui n'est pas accessible depuis le Web lorsque l'extension est installĂ©e dans une application, vous avez deux possibilitĂ©s pour rendre ces ressources accessibles depuis le Web.
Nous recommandons la deuxiĂšme approche de façon Ă ce que votre extension puisse ĂȘtre plus facilement utilisĂ©e par d'autres personnes. Reportez-vous Ă la section Ressources pour plus de dĂ©tails sur la maniĂšre de travailler avec des ressources en gĂ©nĂ©ral.
Votre extension peut ĂȘtre utilisĂ©e par des applications prenant en charge diffĂ©rentes languesâŻ! Par consĂ©quent, si votre extension affiche des contenus pour l'utilisateur final, vous devez essayer de traiter Ă la fois internationalisation et localisation. Plus spĂ©cialement :
Yii::t() afin de pouvoir ĂȘtre traduits. Les messages Ă l'attention des dĂ©veloppeurs (comme les messages d'exceptions internes) n'ont pas besoin d'ĂȘtre traduits.
-Si l'extension affiche des nombres, des dates, etc., ils doivent ĂȘtre formatĂ©s en utilisant yii\i18n\Formatter avec les rĂšgles de formatage appropriĂ©es. Pour plus de dĂ©tails, reportez-vous Ă la section Internationalisation.
Vous souhaitez que votre extension s'exécute sans créer de problÚme à ses utilisateurs. Pour atteindre ce but vous devez la tester avant de la publier.
Il est recommandĂ© que crĂ©iez des cas de test variĂ©s pour tester votre extension plutĂŽt que de vous fier Ă des tests manuels. Ă chaque fois que vous vous apprĂȘterez Ă publier une nouvelle version de votre extension, vous n'aurez plus qu'Ă exĂ©cuter ces cas de test pour garantir que tout est en ordre. Yii fournit une prise en charge des tests qui peut vous aider Ă Ă©crire facilement des unitĂ©s de test, des tests d'acceptation et des tests de fonctionnalitĂ©s. Pour plus de dĂ©tails, reportez-vous Ă la section Tests.
Vous devriez donner à chacune des versions publiées de votre extension un numéro (p. ex. 1.0.1). Nous recommandons de suivre la pratique de la numérotation sémantique des versions lors de la détermination d'un numéro de version.
Pour permettre aux autres personnes de connaßtre votre extension, vous devez la publier. Si c'est la premiÚre fois que vous publiez l'extension, vous devez l'enregistrer sur un dépÎt Composer tel que Packagist. Ensuite, tout ce que vous avez à faire, c'est de créer une balise de version (p. ex. v1.0.1) sur le dépÎt VCS de votre extension et de notifier au dépÎt Composer la nouvelle version. Les gens seront capables de trouver votre nouvelle version et, soit de l'installer, soit de la mettre à jour via le dépÎt Composer.
Dans les versions de votre extension, en plus des fichiers de code, vous devez envisager d'inclure ce qui suit par aider les gens à connaßtre votre extension et à l'utiliser :
readme.md.changelog.md.upgrade.md.Info : les commentaires de votre code peuvent ĂȘtre Ă©crits dans le format Markdown. L'extension
yiisoft/yii2-apidocvous fournit un outil pour générer une documentation d'API agréable et basée sur les commentaires de votre code.
Info : bien que cela ne soit pas une exigence, nous suggérons que votre extension respecte un certain style de codage. Vous pouvez vous reporter au document style du codage du noyau du framework.
Yii fournit les extensions du noyau suivantes (ou "les extensions officielles") qui sont dĂ©veloppĂ©es et maintenues par l'Ă©quipe de dĂ©veloppement de Yii. Elles sont toutes enregistrĂ©es surPackagist et peuvent ĂȘtre facilement installĂ©es comme dĂ©crit dans la sous-section Utilisation des extensions.
Les extensions officielles suivantes sont valables pour les versions Yii 2.1 et plus rĂ©centes. Vous n'avez pas besoin de les installer car elles sont incluse dans le cĆur du framework.
Found a typo, or you think this page needs improvement?
Edit it on GitHub !
Signup or Login in order to comment.