Hintergrundeinführung:
SitePoint veröffentlichte einmal einen Artikel, in dem einige der besten PHP-Frameworks hervorgehoben wurden. Damals lag das Yii-Framework (ausgesprochen Yee) auf dem vierten Platz, und die neueste Version war 1.1.14. Kürzlich hat Yii Version 2.0 veröffentlicht.
(Empfohlenes Tutorial: yii)
Als wir darüber berichteten, befand es sich jedoch noch im RC-Status. Jetzt, da eine völlig neue Version veröffentlicht wurde, ist es meiner Meinung nach an der Zeit, die Faktoren für die Auswahl zu überdenken .
Sieben Gründe, sich für das yii-Framework zu entscheiden:
1. Einfache Installation
Für Webentwickler ist Zeit Geld. Niemand möchte seine Zeit mit mühsamer Installation und Konfiguration verschwenden.
Composer übernimmt den Installationsprozess. Wenn Sie eine Beschreibung des Installationsprozesses wünschen, hat Sitepoint kürzlich einen Artikel dazu veröffentlicht, den Sie unten lesen können. Ich bleibe lieber bei der grundlegenden App-Vorlage, auch wenn ich auf meiner Website eine separate Front-End- und Back-End-Komponente habe. Stattdessen habe ich mich für die Verwendung eines Moduls für den Backend-Teil meiner Website entschieden. (Yii-Module sind die beste Darstellung von Minianwendungen und können in Ihre Hauptanwendung eingebettet werden.)
Hinweis: Die Verzeichnisreferenzen in vielen der folgenden Beispiele verwenden die Verzeichnisstruktur einer einfachen Vorlage.
2. Nutzen Sie moderne Technologie
Yii ist ein reines OOP-Framework, das einige der erweiterten Funktionen von PHP vollständig nutzt, einschließlich verzögerter statischer Bindung, SPL-Klassen und -Schnittstellen sowie anonymer Funktionen.
Alle Klassen verfügen über einen Namensraum und ermöglichen Ihnen die Nutzung ihres PSR-4-kompatiblen Autoloaders. Mit anderen Worten: Mit der Einbeziehung der HTML-Hilfsklassen in Yii ist es genauso einfach:
use yii\helpers\Html;
Yii kann auch Aliase definieren, um Ihren Namespace zu vereinfachen. Im obigen Beispiel lädt die use-Anweisung eine Klassendefinition und der Standardpfad im Verzeichnis ist /vendor/yiisoft/yii2/helpers. Dieser Alias wird in der BaseYii-Klasse in Zeile 79 definiert:
public static $aliases = ['@yii' => __DIR__];
Das Framework selbst wird mit Composer installiert, ebenso wie seine Erweiterung. Das Veröffentlichen einer Erweiterung ist sogar so einfach wie das Erstellen einer „composer.json“, das Hosten Ihres Codes auf Github und das Auflisten der Erweiterung auf Packagist. Yii kann auch Aliase definieren, um Ihren Namespace zu vereinfachen. Im obigen Beispiel lädt die use-Anweisung eine Klassendefinition und der Standardpfad im Verzeichnis ist /vendor/yiisoft/yii2/helpers. Dieser Alias ist in Zeile 79 der BaseYii-Klasse definiert:
3 Hohe Skalierbarkeit
Yii ist wie ein Anzug, er sieht groß aus, lässt sich aber tatsächlich leicht an Ihre Bedürfnisse anpassen. Nahezu jede Komponente des Frameworks ist erweiterbar. Ein einfaches Beispiel ist das Hinzufügen einer eindeutigen Body-ID zu Ihrer Ansicht. (Wenn Sie wissen möchten, warum Sie dies tun möchten, können Sie diesen Artikel lesen)
Zuerst erstelle ich eine Datei namens View.php in meinen App-Komponenten und füge den folgenden Inhalt hinzu:
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 .'"' : ''; } }
Dann in meinem Haupt-In In der Layoutdatei (appviewslayoutsmain.php) möchte ich den folgenden Inhalt im Body-Tag von HTML hinzufügen:
Abschließend möchte ich hinzufügen Fügen Sie den folgenden Inhalt in der Hauptkonfigurationsdatei hinzu, damit Yii die erweiterte View-Klasse anstelle der Standardklasse verwenden kann:
return[ // ... 'components'=> [ // ... 'view'=> [ 'class'=> 'app\components\View' ] ] ];
4. Yii und Codeception sind eng miteinander verbunden. Codeception ist ein erstaunliches PHP-Testframework, das den Prozess der Erstellung von Widgets, Funktionstests und Akzeptanztests für Ihre Anwendungen vereinfacht. Denn jede Bewerbung, die Sie schreiben, ist ein automatisierter Test, oder?
Die Codeception-Erweiterung erleichtert die Konfiguration Ihrer Anwendung während des Testens. Stellen Sie einfach die Datei /tests/_config.php bereit, um Ihr Testprogramm zu konfigurieren. Beispiel:
return[ 'components'=> [ 'mail'=> [ 'useFileTransport'=> true, ], 'urlManager'=> [ 'showScriptName'=> true, ], 'db'=> [ 'dsn'=> 'mysql:host=localhost;dbname=mysqldb_test', ], ], ];
Bei dieser Konfiguration treten die folgenden Situationen auf:
1 Alle während des Funktionstests und des Abnahmetests gesendeten E-Mails werden in eine Datei geschrieben, anstatt gesendet zu werden. Mit dieser Konfiguration geschieht Folgendes:
2. Die URLs in Ihren Tests haben dieses Format: index.php/controller/action statt: /controller/action
3 , nicht Ihre Produktionsdatenbank.
Spezielle Module gibt es im Yii-Framework und auch in Codeception. Es fügt der TestGuy-Klasse mehrere Methoden hinzu, die Sie bei der Aufzeichnung von Aktivitäten in Funktionstests (ORM in Yii) unterstützen. Wenn Sie beispielsweise sehen möchten, ob ein neuer Benutzer mit dem Benutzernamen „testuser“ erfolgreich erstellt wurde, können Sie Folgendes tun:
$I->amOnPage('register'); $I->fillField('username','testuser'); $I->fillField('password','qwerty'); $I->click('Register'); $I->seeRecord('app\models\User',array('name'=> 'testuser'));
5 Sicherheit ist für jede Webanwendung wichtig. Glücklicherweise hat Yii einige tolle Funktionen, die Ihnen in diesem Bereich weiterhelfen.
Yii verfügt über eine sichere Anwendungskomponente, die verschiedene Methoden zur Erstellung einer sichereren Anwendung bereitstellt. Einige der nützlicheren Methoden sind wie folgt:·generatePasswordHash: Generieren Sie eine sichere Einweg-Hash-Funktion aus einem Passwort und Zufallsfaktoren. Diese Methode kompiliert einen Zufallsfaktor für Sie und erstellt dann eine Einweg-Hash-Funktion aus der Zeichenfolge, die von der Kryptofunktion von PHP bereitgestellt wird.
·validatePassword:对于generatePasswordHash,这是一个伴侣功能,并且允许你检查用户提供的密码是否与你存储的散列函数相匹配。
·generateRandomKey:允许你创建一个任意长度的随机字符串。
Yii会对所有不安全的HTTP请求方法(PUT,POST,DELETE)进行自动检查,当你使用ActiveForm::begin()方法创建开放表单标签时,它会生成并输出一个token。通过编辑你的主配置文件可以禁止此功能,方法如下:
return[ 'components'=> [ 'request'=> [ 'enableCsrfValidation'=> false, ] ];
为了防止XSS,Yii提供了一个叫HtmlPurifier的辅助类。这个类有一个名为process的静态方法,并且会使用popular filter library过滤出同名的输出库。
Yii还包括备用类,用来进行用户身份验证和授权。授权分为两种类型:ACF(访问控制过滤器)和RBAC(基于角色的访问控制)。
这两种授权方法,较简单的要数ACF了,它是通过在你的控制器中添加以下行为方法来实现的:
useyii\filters\AccessControl; classDefaultController extendsController { // ... publicfunction behaviors() { return[ // ... 'class'=> AccessControl::className(), 'only'=> ['create','login','view'], 'rules'=> [ [ 'allow'=> true, 'actions'=> ['login','view'], 'roles'=> ['?'] ], [ 'allow'=> true, 'actions'=> ['create'], 'roles'=> ['@'] ] ] ]; } // ... }
上面的代码用于区分DefaultControllerto,允许guest用户的访问login 和view行为,而不是create 行为。(? 是一个匿名用户别名,@ 指的是已认证用户)。
RBAC是指那些用户可以在整个应用中执行特定操作行为的更有效的方法。包括为用户创建角色,定义app权限,然后使这些权限试用于相应的角色。如果你想创建一个Moderator的角色,并允许分配给该角色的所有用户批准文章。
你也可以使用RBAC定义角色,它允许你在特定条件下,授权访问应用的某些方面的自定义规则。例如,你可以创建一个规则,即允许用户编辑自己的文章,而不是那些其他人创建的。
6、缩短开发时间
大多数项目都会涉及一定的重复任务,没有人愿意浪费时间。而Yii提供的一些工具可以帮助你减少在这些任务中所花费的时间,将更多的时间用于定制让客户满意的应用。
在这些工具中,其中有一个名为“Gii”的工具最为强大。Gii是一个基于web的基架代码工具,可以让你快速创建代码模板:
·模型
·控制器
·形式
·模块
·扩展
·CRUD控制器行为和视图
Gii是高度可配置的。你可以将其设置为仅在特定的环境下加载。只需简单编辑下你的web配置文件即可,方法如下:
if (YII_ENV_DEV) { // ... $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', 'allowedIPs' => ['127.0.0.1', '::1'] ] }
这样就可以确保党Yii的环境设置为开发的时候,Gii仅支持加载,并且它只通过本地主机访问时才会加载。
现在,让我们来看下模型生成器吧:
表名使用的是一个预输入控件,来试图猜测哪个表格与你的模型相关联,并且所有领域都有一个翻转工具,提示你如何填写出来。在用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('user', [ 'id' => Schema::TYPE_PK, 'username' => Schema::TYPE_STRING . ' NOT NULL', 'password_hash' => Schema:: TYPE_STRING . ' NOT NULL' ], null); }
然后,保证我可以反向迁移,下面我将添加down 方法:
public function down() { $this->dropTable('user'); }
创建该表将会简单包括一个在运行在命令行的命令:
./yii migrate
然后移除该表:
./yii migrate/down
7、容易调整为最佳性能
大家都知道,一个网站很慢的话会很容易让用户产生不满,所以Yii提供了几种工具来帮助你从应用中“挤”出更多的速度。
所有Yii的缓存组件都是从yii/caching/Cache扩展来的,你可以选择任何一种,你想同时使用一个通用API扩展的缓存系统。你甚至可以注册多个高速缓存组件。Yii目前支持数据库和文件缓存,APC,Memcache, Redis, WinCache, XCache和Zend 数据缓存。
默认情况下,如果你正在使用Active Record,然后Yii会运行一个额外的查询,来确定表参与生成模型的架构。你可以通过编辑注配置文件设置应用程序,从而缓存这些架构:
return [ // ... 'components' => [ // ... 'db' => [ // ... 'enableSchemaCache' => true, 'schemaCacheDuration' => 3600, 'schemaCache' => 'cache', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], ], ];
最后,Yii有一个命令行工具,使前端资源极简化更容易。只需运行以下命令来生成配置模板:
./yii asset/template config.php
然后,编辑该配置来指定工具,达到你想要的简化效果(如关闭编译器, YUI Compressor,或UglifyJS)。生成的配置模板,如下所示:
<?php return [ 'jsCompressor' => 'java -jar compiler.jar --js {from} --js_output_file {to}', 'cssCompressor' => 'java -jar yuicompressor.jar --type css {from} -o {to}', 'bundles' => [ // 'yii\web\YiiAsset', // 'yii\web\JqueryAsset', ], 'targets' => [ 'app\config\AllAsset' => [ 'basePath' => 'path/to/web', 'baseUrl' => '', 'js' => 'js/all-{hash}.js', 'css' => 'css/all-{hash}.css', ], ], 'assetManager' => [ 'basePath' => __DIR__, 'baseUrl' => '', ], ];
接着,运行此控制台命令来实现压缩:
'components' => [ // ... 'assetManager' => [ 'bundles' => require '/app/assets_compressed.php' ] ]
注意:你必须要手动下载和安装这些外部工具。
结论:
像任何一个好的框架一样,Yii能够帮助你快速创建流行的web应用,并确保它们可以做的很好。通过做许多繁琐的事情,它帮你你创建安全的和可测试的网站。你可以轻松的使用它提供的大部分功能,或者你也可以修改其中任何一个来适应你的需求。真心建议你在你的下一个web项目中考虑一下它!
Das obige ist der detaillierte Inhalt vonWarum sollten wir uns für das Yii-Framework entscheiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!