Table des matières
1. Utilisation de Gii
2. Extension de Gii
Architecture du générateur de code
Chemin de recherche du générateur
Modèles de code personnalisés
创建新的生成器
Maison développement back-end tutoriel php Yii Framework Official Guide Series 41 - Sujet spécial : Génération automatique de code

Yii Framework Official Guide Series 41 - Sujet spécial : Génération automatique de code

Feb 16, 2017 am 09:15 AM

Depuis la version 1.1.2, Yii est équipé d'un outil de génération de code basé sur une interface Web Gii. Il remplace l'outil de génération de code en ligne de commande précédent yiic shell. Dans cette partie, nous expliquerons comment utiliser Gii et comment étendre Gii pour augmenter nos résultats de développement.

1. Utilisation de Gii

Gii est implémenté en tant que module et doit être utilisé dans une application Yii existante. Pour utiliser Gii, on change d'abord la configuration de l'application comme suit :


return array(
    ......
    'modules'=>array(
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'在这里填写密码',
            // 'ipFilters'=>array(...IP 列表...),
            // 'newFileMode'=>0666,
            // 'newDirMode'=>0777,
        ),
    ),
);
Copier après la connexion


Ci-dessus, on déclare un fichier nommé gii module, sa classe est GiiModule. Nous définissons également un mot de passe pour ce module. Lorsque nous accédons à Gii, il y aura une zone de saisie demandant de remplir le mot de passe.

Pour des raisons de sécurité, seul l'accès local à Gii est autorisé par défaut. Pour permettre à d'autres machines de confiance d'y accéder, nous devons configurer la propriété GiiModule :: ipFilters comme indiqué ci-dessus.

Étant donné que Gii générera et enregistrera de nouveaux fichiers dans l'application, nous devons nous assurer que le processus du serveur Web est autorisé à le faire. Les propriétés GiiModule::newFileMode et GiiModule::newDirMode ci-dessus contrôlent la manière dont les nouveaux fichiers et répertoires sont générés.

Remarque : Gii est principalement utilisé comme outil de développement. Par conséquent, il doit être installé uniquement sur les machines de développement. Parce qu'il peut générer de nouveaux fichiers PHP dans l'application, nous devons accorder suffisamment d'attention aux problèmes de sécurité (tels que la définition de mots de passe, le filtrage IP).

Gii est désormais accessible via l'URL http://www.php.cn/ . Ici, nous supposons que http://www.php.cn/ est l'URL pour accéder à l'application Yii.

Si l'application Yii utilise le format URL path (voir gestion des URL), nous pouvons accéder à Gii via l'URL http://www.php.cn/. Nous devrons peut-être ajouter les règles d'URL suivantes devant les règles d'URL existantes :

'components'=>array(
    ......
    'urlManager'=>array(
        'urlFormat'=>'path',
        'rules'=>array(
            'gii'=>'gii',
            'gii/<controller:\w+>'=>'gii/<controller>',
            'gii/<controller:\w+>/<action:\w+>'=>'gii/<controller>/<action>',
            ...已有的规则...
        ),
    ),
)
Copier après la connexion


Gii a des générateurs de code par défaut. Chaque générateur de code est chargé de générer un type spécifique de code. Par exemple, le générateur de contrôleur génère une classe de contrôleur et certains scripts de vue d'action ; le générateur de modèle génère une classe ActiveRecord pour la table de données spécifiée.

Le processus de base d'utilisation d'un générateur est le suivant :

  1. Entrez dans la page du générateur

  2. Remplissez les champs spécifiés ; Zone de saisie des paramètres de génération de code. Par exemple, pour utiliser Module Generator pour créer un nouveau module, vous devez spécifier l'ID du module

  3. Cliquez sur le bouton Preview pour prévisualiser le code qui sera généré ; Vous verrez un tableau répertoriant les fichiers qui seront générés. Vous pouvez cliquer sur l'un des fichiers pour prévisualiser le code ;

  4. Cliquez sur le bouton Generate pour générer ces fichiers de code

  5. Afficher ; le journal de génération de code.

2. Extension de Gii

Bien que les générateurs de code Gii par défaut puissent générer du code très puissant, nous souhaitons souvent les personnaliser ou en créer un nouveau en fonction de nos besoins et de nos goûts. et les besoins. Par exemple, nous voulons que le code généré soit dans le style que nous aimons ou que le code prenne en charge plusieurs langues. Tout cela est très simple à mettre en œuvre dans Gii.

Gii peut être étendu de 2 manières : en personnalisant les modèles de code pour les générateurs de code existants et en écrivant de nouveaux générateurs de code.

Architecture du générateur de code

Un générateur de code est stocké dans un répertoire, et le nom de ce répertoire est considéré comme le nom du générateur. Le répertoire se compose généralement des éléments suivants :

model/                       the model generator root folder
   ModelCode.php             the code model used to generate code
   ModelGenerator.php        the code generation controller
   views/                    containing view scripts for the generator
      index.php              the default view script
   templates/                containing code template sets
      default/               the 'default' code template set
         model.php           the code template for generating model class code
Copier après la connexion

Chemin de recherche du générateur

Gii recherche les générateurs disponibles dans le répertoire spécifié par la propriété GiiModule::generatorPaths. Lorsque la personnalisation est requise, nous pouvons effectuer la configuration suivante dans le fichier de configuration de l'application,


return array(
    'modules'=>array(
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'generatorPaths'=>array(
                'application.gii',   // a path alias
            ),
        ),
    ),
);
Copier après la connexion


La configuration ci-dessus indique à Gii Look pour le générateur dans le répertoire avec l'alias application.gii et l'emplacement par défaut system.gii.generators.

Il est également possible d'avoir des générateurs portant le même nom dans des chemins de recherche différents. Dans ce cas, le générateur qui apparaît en premier dans le répertoire spécifié par GiiModule::generatorPaths est prioritaire.

Modèles de code personnalisés

C'est le moyen le plus simple et le plus courant d'étendre Gii. Nous utilisons un exemple pour présenter comment personnaliser le modèle de code. Supposons que nous souhaitions personnaliser le code généré par le générateur de modèle.

Nous créons d'abord un répertoire appelé protected/gii/model/templates/compact . Le model ici signifie que nous allons remplacer le générateur de modèle par défaut. templates/compact signifie que nous ajouterons un nouvel ensemble de modèles de code nommé compact.

Ensuite, nous ajoutons application.gii à GiiModule::generatorPaths dans la configuration de l'application. Comme indiqué ci-dessus.

现在打开 model 代码生成器页面。点击 Code Template 输入框。我们应当看到一个下拉列表,这个列表包含了我们新建的模板目录 compact。可是,若我们选择此模板生成代码,我们将看到错误。这是因为我们还没有在新的 compact 模板集中放入任何实际的代码模板文件。

复制文件 framework/gii/generators/model/templates/default/model.php 到protected/gii/model/templates/compact。若我们再次尝试以 compact 模板生成,我们会成功。但是,生成的代码和以 default 模板集生成的代码没什么不同。

现在是时候做点真正的工作了。打开文件 protected/gii/model/templates/compact/model.php 以编辑它。记得这个文件将作为类似一个视图文件被使用,意味着它可以包含 PHP 表达式和语句。让我们更改模板以便生成的代码里 attributeLabels() 方法使用 Yii::t() 来翻译属性标签:


public function attributeLabels()
{
    return array(
<?php foreach($labels as $name=>$label): ?>
            <?php echo "&#39;$name&#39; => Yii::t('application', '$label'),\n"; ?>
<?php endforeach; ?>
    );
}
Copier après la connexion


在每个代码模板中,我们可以访问一些预定义的变量,例如上面例子中的 $labels。这些变量由对应的代码生成器提供。不同的代码生成器可能在他们的代码模板中提供不同的变量。请认真阅读默认代码模板中的描述。

创建新的生成器

In this sub-section, we show how to create a new generator that can generate a new widget class.

We first create a directory named protected/gii/widget. Under this directory, we will create the following files:

  • WidgetGenerator.php: contains the WidgetGenerator controller class. This is the entry point of the widget generator.

  • WidgetCode.php: contains the WidgetCode model class. This class has the main logic for code generation.

  • views/index.php: the view script showing the code generator input form.

  • templates/default/widget.php: the default code template for generating a widget class file.

Creating WidgetGenerator.php

The WidgetGenerator.php file is extremely simple. It only contains the following code:


class WidgetGenerator extends CCodeGenerator
{
    public $codeModel='application.gii.widget.WidgetCode';
}
Copier après la connexion


In the above code, we specify that the generator will use the model class whose path alias isapplication.gii.widget.WidgetCode. The WidgetGenerator class extends from CCodeGenerator which implements a lot of functionalities, including the controller actions needed to coordinate the code generation process.

Creating WidgetCode.php

The WidgetCode.php file contains the WidgetCode model class that has the main logic for generating a widget class based on the user input. In this example, we assume that the only input we want from the user is the widget class name. Our WidgetCode looks like the following:



class WidgetCode extends CCodeModel
{
    public $className;

    public function rules()
    {
        return array_merge(parent::rules(), array(
            array('className', 'required'),
            array('className', 'match', 'pattern'=>'/^\w+$/'),
        ));
    }

    public function attributeLabels()
    {
        return array_merge(parent::attributeLabels(), array(
            'className'=>'Widget Class Name',
        ));
    }

    public function prepare()
    {
        $path=Yii::getPathOfAlias('application.components.' . $this->className) . '.php';
        $code=$this->render($this->templatepath.'/widget.php');

        $this->files[]=new CCodeFile($path, $code);
    }
}
Copier après la connexion


The WidgetCode class extends from CCodeModel. Like a normal model class, in this class we can declarerules() and attributeLabels() to validate user inputs and provide attribute labels, respectively. Note that because the base class CCodeModel already defines some rules and attribute labels, we should merge them with our new rules and labels here.

The prepare() method prepares the code to be generated. Its main task is to prepare a list of CCodeFileobjects, each of which represent a code file being generated. In our example, we only need to create oneCCodeFile object that represents the widget class file being generated. The new widget class will be generated under the protected/components directory. We call CCodeFile::render method to generate the actual code. This method includes the code template as a PHP script and returns the echoed content as the generated code.

Creating views/index.php

Having the controller (WidgetGenerator) and the model (WidgetCode), it is time for us to create the viewviews/index.php.



<h1>Widget Generator</h1>

<?php $form=$this->beginWidget('CCodeForm', array('model'=>$model)); ?>

    <p class="row">
        <?php echo $form->labelEx($model,'className'); ?>
        <?php echo $form->textField($model,'className',array('size'=>65)); ?>
        <p class="tooltip">
            Widget class name must only contain word characters.
        </p>
        <?php echo $form->error($model,'className'); ?>
    </p>

<?php $this->endWidget(); ?>
Copier après la connexion


In the above, we mainly display a form using the CCodeForm widget. In this form, we display the field to collect the input for the className attribute in WidgetCode.

When creating the form, we can exploit two nice features provided by the CCodeForm widget. One is about input tooltips. The other is about sticky inputs.

If you have tried any default code generator, you will notice that when setting focus in one input field, a nice tooltip will show up next to the field. This can easily achieved here by writing next to the input field a p whose CSS class is tooltip.

For some input fields, we may want to remember their last valid values so that the user can save the trouble of re-entering them each time they use the generator to generate code. An example is the input field collecting the controller base class name default controller generator. These sticky fields are initially displayed as highlighted static text. If we click on them, they will turn into input fields to take user inputs.

In order to declare an input field to be sticky, we need to do two things.

First, we need to declare a sticky validation rule for the corresponding model attribute. For example, the default controller generator has the following rule to declare that baseClass and actions attributes are sticky:



public function rules()
{
    return array_merge(parent::rules(), array(
        ......
        array('baseClass, actions', 'sticky'),
    ));
}
Copier après la connexion


Second, we need to add a CSS class named sticky to the container p of the input field in the view, like the following:



<p class="row sticky">
    ...input field here...
</p>
Copier après la connexion


Creating templates/default/widget.php

Finally, we create the code template templates/default/widget.php. As we described earlier, this is used like a view script that can contain PHP expressions and statements. In a code template, we can always access the $this variable which refers to the code model object. In our example, $this refers to the WidgetModelobject. We can thus get the user-entered widget class name via $this->className.



<?php echo &#39;<?php&#39;; ?>

class <?php echo $this->className; ?> extends CWidget
{
    public function run()
    {

    }
}
Copier après la connexion


This concludes the creation of a new code generator. We can access this code generator immediately via the URL http://www.php.cn

 以上就是Yii框架官方指南系列41——专题:自动代码生成的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Niveaux de force pour chaque ennemi et monstre de R.E.P.O.
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Dead Rails - Comment apprivoiser les loups
3 Il y a quelques semaines By DDD
Blue Prince: Comment se rendre au sous-sol
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel Java
1654
14
Tutoriel PHP
1252
29
Tutoriel C#
1225
24
Développement d'API RESTful dans le framework Yii Développement d'API RESTful dans le framework Yii Jun 21, 2023 pm 12:34 PM

Yii est un framework MVC hautes performances basé sur PHP. Il fournit un ensemble très riche d'outils et de fonctions pour prendre en charge le développement rapide et efficace d'applications Web. Parmi eux, la fonction RESTfulAPI du framework Yii a attiré de plus en plus l'attention et l'amour des développeurs, car l'utilisation du framework Yii peut facilement créer des interfaces RESTful hautes performances et facilement évolutives, offrant un support solide pour le développement d'applications Web. Introduction à RESTfulAPI RESTfulAPI est un

Middleware du framework Yii : prise en charge de plusieurs stockages de données pour les applications Middleware du framework Yii : prise en charge de plusieurs stockages de données pour les applications Jul 28, 2023 pm 12:43 PM

Middleware du framework Yii : fournir une prise en charge de plusieurs stockages de données pour les applications Introduction Le middleware (middleware) est un concept important dans le framework Yii, qui fournit une prise en charge de plusieurs stockages de données pour les applications. Le middleware agit comme un filtre, insérant du code personnalisé entre les requêtes et les réponses d'une application. Grâce au middleware, nous pouvons traiter, vérifier, filtrer les demandes, puis transmettre les résultats traités au middleware suivant ou au gestionnaire final. Le middleware du framework Yii est très simple à utiliser

Créer un site Web de guide de jeu en utilisant le framework Yii Créer un site Web de guide de jeu en utilisant le framework Yii Jun 21, 2023 pm 01:45 PM

Ces dernières années, avec le développement rapide de l'industrie du jeu, de plus en plus de joueurs ont commencé à rechercher des stratégies de jeu pour les aider à réussir. Par conséquent, la création d’un site Web de guides de jeu peut permettre aux joueurs d’obtenir plus facilement des guides de jeu, et en même temps, cela peut également offrir aux joueurs une meilleure expérience de jeu. Lors de la création d'un tel site Web, nous pouvons utiliser le framework Yii pour le développement. Le framework Yii est un framework de développement d'applications web basé sur le langage de programmation PHP. Il présente les caractéristiques d'une efficacité élevée, d'une sécurité et d'une forte évolutivité, et peut nous aider à créer un guide de jeu plus rapidement et plus efficacement.

Étapes pour mettre en œuvre la mise en cache des pages Web et la segmentation des pages à l'aide du framework Yii Étapes pour mettre en œuvre la mise en cache des pages Web et la segmentation des pages à l'aide du framework Yii Jul 30, 2023 am 09:22 AM

Étapes pour mettre en œuvre la mise en cache et la segmentation de pages Web à l'aide du framework Yii Introduction : Au cours du processus de développement Web, afin d'améliorer les performances et l'expérience utilisateur du site Web, il est souvent nécessaire de mettre en cache et de fragmenter la page. Le framework Yii fournit de puissantes fonctions de mise en cache et de mise en page, qui peuvent aider les développeurs à mettre en œuvre rapidement la mise en cache et la segmentation de pages Web. Cet article explique comment utiliser le framework Yii pour implémenter la mise en cache et la segmentation de pages Web. 1. Activez la mise en cache des pages Web Dans le framework Yii, la mise en cache des pages Web peut être activée via le fichier de configuration. Ouvrez le fichier de configuration principal co

Comment utiliser le framework Yii en PHP Comment utiliser le framework Yii en PHP Jun 27, 2023 pm 07:00 PM

Avec le développement rapide des applications Web, le développement Web moderne est devenu une compétence importante. De nombreux frameworks et outils sont disponibles pour développer des applications web efficaces, parmi lesquels le framework Yii est très populaire. Yii est un framework PHP hautes performances basé sur des composants qui utilise les derniers modèles de conception et technologies, fournit des outils et des composants puissants et est idéal pour créer des applications Web complexes. Dans cet article, nous verrons comment utiliser le framework Yii pour créer des applications Web. Installez d'abord le framework Yii,

Yii Framework Middleware : ajoutez des fonctionnalités de journalisation et de débogage à votre application Yii Framework Middleware : ajoutez des fonctionnalités de journalisation et de débogage à votre application Jul 28, 2023 pm 08:49 PM

Middleware du framework Yii : ajouter des fonctionnalités de journalisation et de débogage aux applications [Introduction] Lors du développement d'applications Web, nous devons généralement ajouter des fonctionnalités supplémentaires pour améliorer les performances et la stabilité de l'application. Le framework Yii fournit le concept de middleware qui nous permet d'effectuer certaines tâches supplémentaires avant et après que l'application traite la requête. Cet article explique comment utiliser la fonction middleware du framework Yii pour implémenter les fonctions de journalisation et de débogage. [Qu'est-ce qu'un middleware] Le middleware fait référence au traitement des demandes et des réponses avant et après que l'application traite la demande.

Comment utiliser des contrôleurs pour gérer les requêtes Ajax dans le framework Yii Comment utiliser des contrôleurs pour gérer les requêtes Ajax dans le framework Yii Jul 28, 2023 pm 07:37 PM

Dans le framework Yii, les contrôleurs jouent un rôle important dans le traitement des requêtes. En plus de gérer les requêtes de pages régulières, les contrôleurs peuvent également être utilisés pour gérer les requêtes Ajax. Cet article expliquera comment gérer les requêtes Ajax dans le framework Yii et fournira des exemples de code. Dans le framework Yii, le traitement des requêtes Ajax peut s'effectuer à travers les étapes suivantes : La première étape consiste à créer une classe contrôleur (Controller). Vous pouvez hériter de la classe de contrôleur de base yiiwebCo fournie par le framework Yii

Outils de débogage dans le framework Yii : applications de profilage et de débogage Outils de débogage dans le framework Yii : applications de profilage et de débogage Jun 21, 2023 pm 06:18 PM

Dans le développement d’applications Web modernes, les outils de débogage sont indispensables. Ils aident les développeurs à trouver et à résoudre divers problèmes liés à leurs applications. En tant que framework d'application Web populaire, le framework Yii fournit naturellement des outils de débogage. Cet article se concentrera sur les outils de débogage du framework Yii et expliquera comment ils nous aident à analyser et déboguer les applications. GiiGii est un générateur de code pour le framework Yii. Il peut générer automatiquement du code pour les applications Yii, telles que des modèles, des contrôleurs, des vues, etc. En utilisant Gii,

See all articles