0 follower

Extensions

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 ».

Utilisation des extensions

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 :

  1. Modifier le fichier composer.json de votre application et spécifier quelles extensions (paquets Composer) vous désirez installer.
  2. Exécuter la commande 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-imagine est 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 format yiisoft/yii2-xyz, oĂč xyz varie 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).

Installation manuelle d'extensions

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 :

  1. Télécharger les archives des extensions et les décompresser dans le dossier vendor.
  2. Installer la classe autoloader procurée par les extensions, si elles en possÚdent.
  3. Télécharger et installer toutes les extensions dont vos extensions dépendent selon les instructions.

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',
    ],
]

Création d'extensions

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.

  1. CrĂ©er un projet pour votre extension et l'hĂ©berger dans un dĂ©pĂŽt VCS, tel que github.com. Le travail de dĂ©veloppement et de maintenance pour cette extension doit ĂȘtre fait sur ce dĂ©pĂŽt.
  2. Dans le dossier racine du projet, créez un fichier nommé composer.json comme le réclame Composer. Reportez-vous à la sous-section suivante pour plus de détails.
  3. Enregistrez votre extension dans un dépÎt Composer tel que Packagist, afin que les autres utilisateurs puissent la trouver et l'installer avec Composer.

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\\": ""
        }
    }
}

Nommage des paquets

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.

Types de paquet

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).

Dépendances

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.

Chargement automatique des classes

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Ă©.

Espaces de noms

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.

Classes d'amorçage

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.

Travail avec des bases de données

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 :

  • fournir des migrations pour manipuler le schĂ©ma de base de donnĂ©es, plutĂŽt que d'utiliser des fichiers SQL ;
  • essayer de rendre les migrations applicables Ă  diffĂ©rents systĂšmes de gestion de bases de donnĂ©es ;
  • Ă©viter d'utiliser Active Record dans les migrations.

Utilisation des ressources

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.

  • demander aux utilisateurs de l'extension de copier les ressources manuellement dans un dossier spĂ©cifique accessible depuis le Web ;
  • dĂ©clarer un paquet de ressources et compter sur le mĂ©canisme de publication automatique des ressources pour copier les fichiers listĂ©s dans le paquet de ressources dans un dossier accessible 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.

Internationalisation et Localisation

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 :

  • Si l'extension affiche des messages pour l'utilisateur final, les messages doivent ĂȘtre enveloppĂ©s dans la mĂ©thode 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.

Tests

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.

Numérotation des versions

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.

Publication

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 :

  • Un ficher readme (lisez-moi) dans le dossier racine du paquet : il doit dĂ©crire ce que fait votre extension, comment l'installer et l'utiliser. Nous vous recommandons de l'Ă©crire dans le format Markdown et de nommer ce fichier readme.md.
  • Un fichier changelog (journal des modifications) dans le dossier racine du paquet : il liste les changements apportĂ©s dans chacune des versions. Ce fichier peut ĂȘtre Ă©crit dans le format Markdown et nommĂ© changelog.md.
  • Un fichier upgrade (mise Ă  jour) dans le dossier racine du paquet : il donne les instructions sur la maniĂšre de mettre l'extension Ă  jour en partant d'une version prĂ©cĂ©dente. Ce fichier peut ĂȘtre Ă©crit dans le format Markdown et nommĂ© upgrade.md.
  • Tutorials, demos, screenshots, etc.: ces derniers sont nĂ©cessaires si votre extension fournit de nombreuses fonctionnalitĂ©s qui ne peuvent ĂȘtre couvertes dans le fichier readme.
  • Une documentation de l'API : votre code doit ĂȘtre bien documentĂ© pour permettre aux autres personnes de le lire plus facilement et de le comprendre. Vous pouvez faire rĂ©fĂ©rence au fichier de la classe BaseObject pour savoir comment documenter votre code.

Info : les commentaires de votre code peuvent ĂȘtre Ă©crits dans le format Markdown. L'extension yiisoft/yii2-apidoc vous 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.

Extensions du noyau

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.

  • yiisoft/yii2-apidoc : fournit un gĂ©nĂ©rateur d'API extensible et de haute performance. Elle est aussi utilisĂ©e pour gĂ©nĂ©rer l'API du noyau du framework.
  • yiisoft/yii2-authclient : fournit un jeu de clients d'authentification courants tels que Facebook OAuth2 client, GitHub OAuth2 client.
  • yiisoft/yii2-bootstrap : fournit un jeu d'objets graphiques qui encapsulent les composants et les greffons de Bootstrap.
  • yiisoft/yii2-debug : fournit la prise en charge du dĂ©bogage des applications Yii. Lorsque cette extension est utilisĂ©e, une barre de dĂ©bogage apparaĂźt au pied de chacune des pages. Cette extension fournit aussi un jeu de pages autonomes pour afficher des informations de dĂ©bogage plus dĂ©taillĂ©es.
  • yiisoft/yii2-elasticsearch : fournit la prise en charge d'Elasticsearch. Elle inclut un moteur de requĂȘtes/recherches de base et met en Ɠuvre le motif Active Record qui permet de stocker des enregistrement actifs dans Elasticsearch.
  • yiisoft/yii2-faker : fournit la prise en charge de Faker pour gĂ©nĂ©rer des donnĂ©es factices pour vous.
  • yiisoft/yii2-gii : fournit un gĂ©nĂ©rateur de code basĂ© sur le Web qui est hautement extensible et peut ĂȘtre utilisĂ© pour gĂ©nĂ©rer rapidement des modĂšles, des formulaires, des modules, des requĂȘtes CRUD, etc.
  • yiisoft/yii2-httpclient : provides an HTTP client.
  • yiisoft/yii2-imagine : fournit des fonctionnalitĂ©s couramment utilisĂ©es de manipulation d'images basĂ©es sur Imagine.
  • yiisoft/yii2-jui : fournit un jeu d'objets graphiques qui encapsulent les interactions et les objets graphiques de JQuery UI.
  • yiisoft/yii2-mongodb : fournit la prise en charge de MongoDB. Elle inclut des fonctionnalitĂ©s telles que les requĂȘtes de base, les enregistrements actifs, les migrations, la mise en cache, la gĂ©nĂ©ration de code, etc.
  • yiisoft/yii2-queue: fournit la prise en charge pour exĂ©cuter des tĂąches en asynchrone via des queues. Il prend en charge les queues en se basant sur, DB, Redis, RabbitMQ, AMQP, Beanstalk et Gearman.
  • yiisoft/yii2-redis : fournit la prise en charge de redis. Elle inclut des fonctionnalitĂ©s telles que les requĂȘtes de base, les enregistrements actifs, la mise en cache, etc.
  • yiisoft/yii2-shell: fournit un interprĂšte de commandes (shell) basĂ© sur psysh.
  • yiisoft/yii2-smarty : fournit un moteur de modĂšles basĂ© sur Smarty.
  • yiisoft/yii2-sphinx : fournit la prise en charge de Sphinx. Elle inclut des fonctionnalitĂ©s telles que les requĂȘtes de base, les enregistrements actifs, la gĂ©nĂ©ration de code, etc.
  • yiisoft/yii2-swiftmailer : fournit les fonctionnalitĂ©s d'envoi de courriels basĂ©es sur swiftmailer.
  • yiisoft/yii2-twig : fournit un moteur de modĂšles basĂ© sur Twig.

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 !