Maison  >  Article  >  cadre php  >  Pourquoi devrions-nous choisir le framework yii

Pourquoi devrions-nous choisir le framework yii

王林
王林avant
2020-11-23 16:58:304337parcourir

Pourquoi devrions-nous choisir le framework yii

Introduction au contexte :

SitePoint a publié un article mettant en avant certains des meilleurs frameworks PHP (prononcé Yii) à l'époque, à égalité au quatrième rang, le Framework. la dernière version est la 1.1.14. Récemment, Yii a publié la version 2.0.

(Tutoriel recommandé : yii)

Cependant, lorsque nous en avons rendu compte, il était toujours au statut RC, et maintenant la nouvelle version complète vient a été publié, je pense qu'il est temps de reconsidérer les facteurs qui entrent en ligne de compte dans son choix.

Sept raisons de choisir le framework yii :

1. Installation facile

Pour les développeurs Web, le temps, c'est de l'argent. Personne ne veut perdre son temps dans une installation et une configuration fastidieuses.

Composer se chargera du processus d'installation. Eh bien, si vous souhaitez une description du processus d'installation, Sitepoint a récemment publié un article à ce sujet, que vous pouvez lire ci-dessous. Je préfère m'en tenir au modèle d'application de base même si j'ai un composant front-end et back-end distincts sur mon site. Au lieu de cela, j'ai choisi d'utiliser un module pour la partie backend de mon site. (Les modules Yii sont la meilleure représentation des mini-applications, conçues pour être intégrées dans votre application principale.)

Remarque : les références de répertoire dans de nombreux exemples ci-dessous utilisent la structure de répertoires d'un modèle simple.

2. Utiliser la technologie moderne

Yii est un framework POO pur qui utilise pleinement certaines des fonctionnalités les plus avancées de PHP, notamment la liaison statique retardée, les classes et interfaces SPL et les fonctions anonymes.

Toutes les classes sont dotées d'un espace de noms et vous permettent de profiter de leur chargeur automatique compatible PSR-4. En d'autres termes, inclure la classe auxiliaire HTML dans Yii est tout aussi simple :

use yii\helpers\Html;

Yii peut également définir des alias pour vous aider à simplifier votre espace de noms. Dans l'exemple ci-dessus, l'instruction use chargera une définition de classe et le chemin par défaut dans le répertoire est /vendor/yiisoft/yii2/helpers. Cet alias est défini dans la classe BaseYii à la ligne 79 :

public static $aliases = ['@yii' => __DIR__];

Le framework lui-même est installé à l'aide de Composer, comme ses extensions. Publier une extension est aussi simple que de créer un composer.json, d'héberger votre code sur Github et de répertorier l'extension sur Packagist. Yii peut également définir des alias pour simplifier votre espace de noms. Dans l'exemple ci-dessus, l'instruction use chargera une définition de classe et le chemin par défaut dans le répertoire est /vendor/yiisoft/yii2/helpers. Cet alias est défini à la ligne 79 de la classe BaseYii :

3. Haute évolutivité

Yii est comme un costume, il a l'air grand, mais il est en fait facile à ajuster. Répondez à vos besoins. Pratiquement tous les composants du framework sont extensibles. Un exemple simple consiste à ajouter un identifiant de corps unique à votre vue. (Si vous voulez savoir pourquoi vous voulez faire cela, vous pouvez consulter cet article)

Tout d'abord, je vais créer un fichier appelé View.php dans mes composants d'application et ajouter le contenu suivant :

namespaceapp\components;
 
classView extendsyii\web\View {
 
    public$bodyId;
 
    /* Yii allows you to add magic getter methods by prefacing method names with "get" */
 
    publicfunction getBodyIdAttribute() {
        return($this->bodyId !='') ?'id="' . $this->bodyId .'"' : '';
    }
 
}

Ensuite, dans mon fichier de mise en page principal (appviewslayoutsmain.php), je souhaite ajouter ce qui suit dans la balise body du HTML :

BodyIdAttribute?>>

Enfin, je souhaite ajouter le contenu suivant au fichier de configuration principal afin que Yii puisse utiliser la classe View étendue au lieu de celle par défaut :

return[
    // ...
    'components'=> [
        // ...
        'view'=> [
            'class'=> 'app\components\View'
        ]  
    ]
];

4. Encouragez les tests

<.> Yii et Codeception sont étroitement liés. Codeception est un incroyable framework de test PHP qui permet de simplifier le processus de création de widgets, de tests fonctionnels et de tests d'acceptation pour votre application. Parce que chaque application que vous écrivez est un test automatisé, n'est-ce pas ?

L'extension Codeception facilitera la configuration de votre application lors des tests. Fournissez simplement le fichier /tests/_config.php pour configurer votre programme de test. Par exemple :

return[
    &#39;components&#39;=> [
        &#39;mail&#39;=> [
            &#39;useFileTransport&#39;=> true,
        ],
        &#39;urlManager&#39;=> [
            &#39;showScriptName&#39;=> true,
        ],
        &#39;db&#39;=> [
                &#39;dsn&#39;=> &#39;mysql:host=localhost;dbname=mysqldb_test&#39;,
        ],
    ],
];

En utilisant cette configuration, les situations suivantes se produiront :

1. Tout e-mail envoyé lors des tests fonctionnels et des tests d'acceptation sera écrit dans un fichier au lieu d'être envoyé. En utilisant cette configuration, ce qui suit se produira :

2. Les URL de vos tests seront dans ce format : index.php/controller/action au lieu de ceci : /controller/action

3 . Le test utilisera votre base de données de test, pas votre base de données produit.

Existe dans des modules spéciaux dans le framework Yii et existe également dans Codeception. Il ajoute plusieurs méthodes à la classe TestGuy pour vous aider à enregistrer les activités lors des tests fonctionnels (ORM dans Yii). Par exemple, si vous voulez voir si un nouvel utilisateur avec le nom d'utilisateur "testuser" a été créé avec succès, vous pouvez procéder comme suit :

$I->amOnPage(&#39;register&#39;);
$I->fillField(&#39;username&#39;,&#39;testuser&#39;);
$I->fillField(&#39;password&#39;,&#39;qwerty&#39;);
$I->click(&#39;Register&#39;);
$I->seeRecord(&#39;app\models\User&#39;,array(&#39;name&#39;=> &#39;testuser&#39;));

5. Simplifiez la sécurité

Sécurité Le sexe est un élément important fait partie de toute application Web et, heureusement, Yii propose des fonctionnalités intéressantes pour vous aider dans ce domaine.

Yii est livré avec un composant d'application sécurisé, qui expose plusieurs méthodes pour aider à créer une application plus sécurisée. Certaines des méthodes les plus utiles sont les suivantes :

·generatePasswordHash : génère une fonction de hachage unidirectionnelle sécurisée à partir d'un mot de passe et de facteurs aléatoires. Cette méthode compile un facteur aléatoire pour vous, puis crée une fonction de hachage unidirectionnelle à partir de la chaîne fournie par la fonction crypt de PHP.

·validatePassword:对于generatePasswordHash,这是一个伴侣功能,并且允许你检查用户提供的密码是否与你存储的散列函数相匹配。

·generateRandomKey:允许你创建一个任意长度的随机字符串。

Yii会对所有不安全的HTTP请求方法(PUT,POST,DELETE)进行自动检查,当你使用ActiveForm::begin()方法创建开放表单标签时,它会生成并输出一个token。通过编辑你的主配置文件可以禁止此功能,方法如下:

return[
    &#39;components&#39;=> [
        &#39;request&#39;=> [
            &#39;enableCsrfValidation&#39;=> false,
        ]
];

为了防止XSS,Yii提供了一个叫HtmlPurifier的辅助类。这个类有一个名为process的静态方法,并且会使用popular filter library过滤出同名的输出库。

Yii还包括备用类,用来进行用户身份验证和授权。授权分为两种类型:ACF(访问控制过滤器)和RBAC(基于角色的访问控制)。

这两种授权方法,较简单的要数ACF了,它是通过在你的控制器中添加以下行为方法来实现的:

useyii\filters\AccessControl;
 
classDefaultController extendsController {
    // ...
    publicfunction behaviors() {
        return[
            // ...
            &#39;class&#39;=> AccessControl::className(),
            &#39;only&#39;=> [&#39;create&#39;,&#39;login&#39;,&#39;view&#39;],
                &#39;rules&#39;=> [
                [
                    &#39;allow&#39;=> true,
                    &#39;actions&#39;=> [&#39;login&#39;,&#39;view&#39;],
                    &#39;roles&#39;=> [&#39;?&#39;]
                ],
                [
                    &#39;allow&#39;=> true,
                    &#39;actions&#39;=> [&#39;create&#39;],
                    &#39;roles&#39;=> [&#39;@&#39;]
                ]
            ]
        ];
    }
    // ...
}

上面的代码用于区分DefaultControllerto,允许guest用户的访问login 和view行为,而不是create 行为。(? 是一个匿名用户别名,@ 指的是已认证用户)。

RBAC是指那些用户可以在整个应用中执行特定操作行为的更有效的方法。包括为用户创建角色,定义app权限,然后使这些权限试用于相应的角色。如果你想创建一个Moderator的角色,并允许分配给该角色的所有用户批准文章。

你也可以使用RBAC定义角色,它允许你在特定条件下,授权访问应用的某些方面的自定义规则。例如,你可以创建一个规则,即允许用户编辑自己的文章,而不是那些其他人创建的。

6、缩短开发时间

大多数项目都会涉及一定的重复任务,没有人愿意浪费时间。而Yii提供的一些工具可以帮助你减少在这些任务中所花费的时间,将更多的时间用于定制让客户满意的应用。

在这些工具中,其中有一个名为“Gii”的工具最为强大。Gii是一个基于web的基架代码工具,可以让你快速创建代码模板:

  • ·模型

  • ·控制器

  • ·形式

  • ·模块

  • ·扩展

  • ·CRUD控制器行为和视图

Gii是高度可配置的。你可以将其设置为仅在特定的环境下加载。只需简单编辑下你的web配置文件即可,方法如下:

if (YII_ENV_DEV) {
    // ...
    $config[&#39;modules&#39;][&#39;gii&#39;] = [
        &#39;class&#39; => &#39;yii\gii\Module&#39;,
        &#39;allowedIPs&#39; => [&#39;127.0.0.1&#39;, &#39;::1&#39;]
    ]
}

这样就可以确保党Yii的环境设置为开发的时候,Gii仅支持加载,并且它只通过本地主机访问时才会加载。

现在,让我们来看下模型生成器吧:

Pourquoi devrions-nous choisir le framework yii

表名使用的是一个预输入控件,来试图猜测哪个表格与你的模型相关联,并且所有领域都有一个翻转工具,提示你如何填写出来。在用Gii生成它之前,你可以预览代码,并且所有代码模板是完全可以自定义的。

还有几个命令行工具可以帮你为你的自动化测试创建数据库迁移,信息翻译(I18N:国际化)和数据库fixtures 代码模板。例如,你可以使用如下命令创建一个新的数据库迁移文件:

yii migrate/create create_user_table

这将会在 {appdir}/migrations上创建一个新的迁移模板,看起来像这样的:

<?php
 
    use yii\db\Schema;
 
    class m140924_153425_create_user_table extends \yii\db\Migration
    {
        public function up()
        {
 
        }
 
        public function down()
        {
            echo "m140924_153425_create_user_table cannot be reverted.\n";
 
            return false;
        }
}

所以我们可以说,我想添加在该表中再添加几列。我只想添加以下内容到up 方法中:

public function up()
{
    $this->createTable(&#39;user&#39;, [
        &#39;id&#39; => Schema::TYPE_PK,
        &#39;username&#39; => Schema::TYPE_STRING . &#39; NOT NULL&#39;,
        &#39;password_hash&#39; => Schema:: TYPE_STRING . &#39; NOT NULL&#39;
    ], null);
}

然后,保证我可以反向迁移,下面我将添加down 方法:

public function down()
{
$this->dropTable(&#39;user&#39;);
}

创建该表将会简单包括一个在运行在命令行的命令:

./yii migrate

然后移除该表:

./yii migrate/down

7、容易调整为最佳性能

大家都知道,一个网站很慢的话会很容易让用户产生不满,所以Yii提供了几种工具来帮助你从应用中“挤”出更多的速度。

所有Yii的缓存组件都是从yii/caching/Cache扩展来的,你可以选择任何一种,你想同时使用一个通用API扩展的缓存系统。你甚至可以注册多个高速缓存组件。Yii目前支持数据库和文件缓存,APC,Memcache, Redis, WinCache, XCache和Zend 数据缓存。

默认情况下,如果你正在使用Active Record,然后Yii会运行一个额外的查询,来确定表参与生成模型的架构。你可以通过编辑注配置文件设置应用程序,从而缓存这些架构:

return [
    // ...
    &#39;components&#39; => [
        // ...
        &#39;db&#39; => [
            // ...
            &#39;enableSchemaCache&#39; => true,
            &#39;schemaCacheDuration&#39; => 3600,
            &#39;schemaCache&#39; => &#39;cache&#39;,
        ],
        &#39;cache&#39; => [
            &#39;class&#39; => &#39;yii\caching\FileCache&#39;,
        ],
    ],
];

最后,Yii有一个命令行工具,使前端资源极简化更容易。只需运行以下命令来生成配置模板:

./yii asset/template config.php

然后,编辑该配置来指定工具,达到你想要的简化效果(如关闭编译器, YUI Compressor,或UglifyJS)。生成的配置模板,如下所示:

<?php
    return [
        &#39;jsCompressor&#39; => &#39;java -jar compiler.jar --js {from} --js_output_file {to}&#39;,
        &#39;cssCompressor&#39; => &#39;java -jar yuicompressor.jar --type css {from} -o {to}&#39;,
        &#39;bundles&#39; => [
            // &#39;yii\web\YiiAsset&#39;,
            // &#39;yii\web\JqueryAsset&#39;,
        ],
        &#39;targets&#39; => [
            &#39;app\config\AllAsset&#39; => [
                &#39;basePath&#39; => &#39;path/to/web&#39;,
                &#39;baseUrl&#39; => &#39;&#39;,
                &#39;js&#39; => &#39;js/all-{hash}.js&#39;,
                &#39;css&#39; => &#39;css/all-{hash}.css&#39;,
            ],
        ],
        &#39;assetManager&#39; => [
            &#39;basePath&#39; => __DIR__,
            &#39;baseUrl&#39; => &#39;&#39;,
        ],
    ];

接着,运行此控制台命令来实现压缩:

&#39;components&#39; => [
    // ...
    &#39;assetManager&#39; => [
        &#39;bundles&#39; => require &#39;/app/assets_compressed.php&#39;
    ]
]

注意:你必须要手动下载和安装这些外部工具。

结论:

像任何一个好的框架一样,Yii能够帮助你快速创建流行的web应用,并确保它们可以做的很好。通过做许多繁琐的事情,它帮你你创建安全的和可测试的网站。你可以轻松的使用它提供的大部分功能,或者你也可以修改其中任何一个来适应你的需求。真心建议你在你的下一个web项目中考虑一下它!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer