您好,登錄后才能下訂單哦!
小編給大家分享一下為什么選擇yii框架,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
選擇yii框架的七大理由:
1、安裝簡(jiǎn)單
對(duì)Web開(kāi)發(fā)者來(lái)說(shuō),時(shí)間就是金錢(qián)。沒(méi)有人會(huì)希望把自己的時(shí)間浪費(fèi)在繁瑣的安裝和配置上。
Composer會(huì)來(lái)處理安裝程序。那如果你想要一個(gè)安裝過(guò)程的描述,Sitepoint最近發(fā)表了一篇關(guān)于此的文章,你可以參閱以下。而我比較喜歡傾向于使用基本的應(yīng)用模板,哪怕我的站點(diǎn)上有一個(gè)單獨(dú)的前端和后端組件。相反,我選擇在我站點(diǎn)的后端部分使用一個(gè)模塊。(Yii模塊是迷你應(yīng)用程序的最佳寫(xiě)照,用來(lái)嵌入到你的主應(yīng)用程序中。)
注:后面的很多例子中的目錄引用都使用到了簡(jiǎn)單模板的目錄結(jié)構(gòu)。
2、使用現(xiàn)代技術(shù)
Yii是一個(gè)純粹的OOP框架,它充分利用了PHP一些較先進(jìn)的功能,包括延遲靜態(tài)綁定,SPL類(lèi)和接口,以及匿名函數(shù)。
所有的類(lèi)都被稱(chēng)為命名空間,并允許你利用它們的PSR-4兼容的自動(dòng)加載機(jī)。也就是說(shuō),包括Yii中的HTML輔助類(lèi),也是同樣如此簡(jiǎn)單:
use yii\helpers\Html;
Yii還可以定義別名,來(lái)幫助簡(jiǎn)化你的命名空間。在上面的例子中,use聲明會(huì)加載一個(gè)類(lèi)定義,目錄中的默認(rèn)路徑為 /vendor/yiisoft/yii2/helpers。這個(gè)別名被定義在BaseYii類(lèi)中第79行:
public static $aliases = ['@yii' => __DIR__];
該框架本身是使用Composer安裝的,和它的擴(kuò)展一樣。發(fā)布擴(kuò)展的程序甚至和創(chuàng)建composer.json一樣簡(jiǎn)單,在Github上托管你的代碼,并在Packagist上列出擴(kuò)展。Yii還可以定義別名,來(lái)幫助簡(jiǎn)化你的命名空間。在上面的例子中,use聲明會(huì)加載一個(gè)類(lèi)定義,目錄中的默認(rèn)路徑為 /vendor/yiisoft/yii2/helpers。這個(gè)別名被定義在BaseYii類(lèi)中第79行:
3、高度的可擴(kuò)展性
Yii就像一套西裝,看起來(lái)很大,但其實(shí)卻很容易調(diào)整來(lái)滿(mǎn)足你的需求。實(shí)際上,框架的每個(gè)組件都是可擴(kuò)展的。舉一個(gè)簡(jiǎn)單的例子就是,在你的觀(guān)點(diǎn)上增加了一個(gè)獨(dú)特的body ID。(如果想知道你為什么想這樣做,可以查看此文章)
首先,我會(huì)在我的app\components中創(chuàng)建一個(gè)名為View.php的文件,并添加以下內(nèi)容:
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 .'"' : ''; } }
然后,在我的主布局文件(app\views\layouts\main.php)中,我想在HTML的body標(biāo)簽中補(bǔ)充以下內(nèi)容:
<body <?=$this->BodyIdAttribute?>>
最后,我想在主配置文件中添加如下內(nèi)容,讓Yii可以使用擴(kuò)展的View類(lèi),而不是默認(rèn)的:
return[ // ... 'components'=> [ // ... 'view'=> [ 'class'=> 'app\components\View' ] ] ];
4、鼓勵(lì)測(cè)試
Yii與Codeception是緊密相連的。Codeception是一個(gè)了不起的PHP測(cè)試框架,有助于簡(jiǎn)化應(yīng)用創(chuàng)建部件、功能測(cè)試和驗(yàn)收測(cè)試的過(guò)程。因?yàn)槟銓?xiě)的所有應(yīng)用均是自動(dòng)化測(cè)試,對(duì)吧?
測(cè)試過(guò)程中,Codeception擴(kuò)展會(huì)使配置應(yīng)用程序變得更簡(jiǎn)單。只需簡(jiǎn)單提供/tests/_config.php文件,即可配置你的測(cè)試程序。例如:
return[ 'components'=> [ 'mail'=> [ 'useFileTransport'=> true, ], 'urlManager'=> [ 'showScriptName'=> true, ], 'db'=> [ 'dsn'=> 'mysql:host=localhost;dbname=mysqldb_test', ], ], ];
使用該配置,將會(huì)發(fā)生如下幾種情況:
1、 在功能測(cè)試和驗(yàn)收測(cè)試期間發(fā)送的任何一封郵件,將會(huì)被寫(xiě)入一個(gè)文件中,而不是被發(fā)送。使用該配置,將會(huì)發(fā)生如下這種情況:
2、 在你測(cè)試中的URLs將會(huì)采取這種格式: index.php/controller/action 而不是這種:/controller/action
3、 測(cè)試將會(huì)使用你的測(cè)試數(shù)據(jù)庫(kù),而不是你的產(chǎn)品數(shù)據(jù)庫(kù)。
存在Yii框架中的特殊模塊,同樣也存在Codeception內(nèi)。它TestGuy類(lèi)中增加了幾個(gè)方法,協(xié)助你在功能測(cè)試中的活動(dòng)記錄(Yii中的ORM)。舉例來(lái)說(shuō),如果你想看看是否成功創(chuàng)建了一個(gè)用戶(hù)名為“testuser”的新user,你可以做以下幾點(diǎn):
$I->amOnPage('register'); $I->fillField('username','testuser'); $I->fillField('password','qwerty'); $I->click('Register'); $I->seeRecord('app\models\User',array('name'=> 'testuser'));
5、簡(jiǎn)化安全性
安全性是任何一個(gè)web應(yīng)用的重要組成部分,幸運(yùn)的是,Yii有一些很棒的功能可以幫你解決這方面的煩惱。
Yii帶有一個(gè)安全應(yīng)用組件,其中公開(kāi)的幾個(gè)方法可以幫助創(chuàng)建一個(gè)更安全的應(yīng)用。其中一些比較有用的方法如下:
·generatePasswordHash: 從一個(gè)密碼和隨機(jī)因子生成一個(gè)安全的單向散列函數(shù)。這種方法為你編譯了一個(gè)隨機(jī)因子,然后通過(guò)PHP crypt函數(shù)功能提供的字符串創(chuàng)建了一個(gè)單項(xiàng)散列函數(shù)。
·validatePassword:對(duì)于generatePasswordHash,這是一個(gè)伴侶功能,并且允許你檢查用戶(hù)提供的密碼是否與你存儲(chǔ)的散列函數(shù)相匹配。
·generateRandomKey:允許你創(chuàng)建一個(gè)任意長(zhǎng)度的隨機(jī)字符串。
Yii會(huì)對(duì)所有不安全的HTTP請(qǐng)求方法(PUT,POST,DELETE)進(jìn)行自動(dòng)檢查,當(dāng)你使用ActiveForm::begin()方法創(chuàng)建開(kāi)放表單標(biāo)簽時(shí),它會(huì)生成并輸出一個(gè)token。通過(guò)編輯你的主配置文件可以禁止此功能,方法如下:
return[ 'components'=> [ 'request'=> [ 'enableCsrfValidation'=> false, ] ];
為了防止XSS,Yii提供了一個(gè)叫HtmlPurifier的輔助類(lèi)。這個(gè)類(lèi)有一個(gè)名為process的靜態(tài)方法,并且會(huì)使用popular filter library過(guò)濾出同名的輸出庫(kù)。
Yii還包括備用類(lèi),用來(lái)進(jìn)行用戶(hù)身份驗(yàn)證和授權(quán)。授權(quán)分為兩種類(lèi)型:ACF(訪(fǎng)問(wèn)控制過(guò)濾器)和RBAC(基于角色的訪(fǎng)問(wèn)控制)。
這兩種授權(quán)方法,較簡(jiǎn)單的要數(shù)ACF了,它是通過(guò)在你的控制器中添加以下行為方法來(lái)實(shí)現(xiàn)的:
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'=> ['@'] ] ] ]; } // ... }
上面的代碼用于區(qū)分DefaultControllerto,允許guest用戶(hù)的訪(fǎng)問(wèn)login 和view行為,而不是create 行為。(? 是一個(gè)匿名用戶(hù)別名,@ 指的是已認(rèn)證用戶(hù))。
RBAC是指那些用戶(hù)可以在整個(gè)應(yīng)用中執(zhí)行特定操作行為的更有效的方法。包括為用戶(hù)創(chuàng)建角色,定義app權(quán)限,然后使這些權(quán)限試用于相應(yīng)的角色。如果你想創(chuàng)建一個(gè)Moderator的角色,并允許分配給該角色的所有用戶(hù)批準(zhǔn)文章。
你也可以使用RBAC定義角色,它允許你在特定條件下,授權(quán)訪(fǎng)問(wèn)應(yīng)用的某些方面的自定義規(guī)則。例如,你可以創(chuàng)建一個(gè)規(guī)則,即允許用戶(hù)編輯自己的文章,而不是那些其他人創(chuàng)建的。
6、縮短開(kāi)發(fā)時(shí)間
大多數(shù)項(xiàng)目都會(huì)涉及一定的重復(fù)任務(wù),沒(méi)有人愿意浪費(fèi)時(shí)間。而Yii提供的一些工具可以幫助你減少在這些任務(wù)中所花費(fèi)的時(shí)間,將更多的時(shí)間用于定制讓客戶(hù)滿(mǎn)意的應(yīng)用。
在這些工具中,其中有一個(gè)名為“Gii”的工具最為強(qiáng)大。Gii是一個(gè)基于web的基架代碼工具,可以讓你快速創(chuàng)建代碼模板:
·模型
·控制器
·形式
·模塊
·擴(kuò)展
·CRUD控制器行為和視圖
Gii是高度可配置的。你可以將其設(shè)置為僅在特定的環(huán)境下加載。只需簡(jiǎn)單編輯下你的web配置文件即可,方法如下:
if (YII_ENV_DEV) { // ... $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', 'allowedIPs' => ['127.0.0.1', '::1'] ] }
這樣就可以確保黨Yii的環(huán)境設(shè)置為開(kāi)發(fā)的時(shí)候,Gii僅支持加載,并且它只通過(guò)本地主機(jī)訪(fǎng)問(wèn)時(shí)才會(huì)加載。
現(xiàn)在,讓我們來(lái)看下模型生成器吧:
表名使用的是一個(gè)預(yù)輸入控件,來(lái)試圖猜測(cè)哪個(gè)表格與你的模型相關(guān)聯(lián),并且所有領(lǐng)域都有一個(gè)翻轉(zhuǎn)工具,提示你如何填寫(xiě)出來(lái)。在用Gii生成它之前,你可以預(yù)覽代碼,并且所有代碼模板是完全可以自定義的。
還有幾個(gè)命令行工具可以幫你為你的自動(dòng)化測(cè)試創(chuàng)建數(shù)據(jù)庫(kù)遷移,信息翻譯(I18N:國(guó)際化)和數(shù)據(jù)庫(kù)fixtures 代碼模板。例如,你可以使用如下命令創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)遷移文件:
yii migrate/create create_user_table
這將會(huì)在 {appdir}/migrations上創(chuàng)建一個(gè)新的遷移模板,看起來(lái)像這樣的:
<?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; } }
所以我們可以說(shuō),我想添加在該表中再添加幾列。我只想添加以下內(nèi)容到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'); }
創(chuàng)建該表將會(huì)簡(jiǎn)單包括一個(gè)在運(yùn)行在命令行的命令:
./yii migrate
然后移除該表:
./yii migrate/down
7、容易調(diào)整為最佳性能
大家都知道,一個(gè)網(wǎng)站很慢的話(huà)會(huì)很容易讓用戶(hù)產(chǎn)生不滿(mǎn),所以Yii提供了幾種工具來(lái)幫助你從應(yīng)用中“擠”出更多的速度。
所有Yii的緩存組件都是從yii/caching/Cache擴(kuò)展來(lái)的,你可以選擇任何一種,你想同時(shí)使用一個(gè)通用API擴(kuò)展的緩存系統(tǒng)。你甚至可以注冊(cè)多個(gè)高速緩存組件。Yii目前支持?jǐn)?shù)據(jù)庫(kù)和文件緩存,APC,Memcache, Redis, WinCache, XCache和Zend 數(shù)據(jù)緩存。
默認(rèn)情況下,如果你正在使用Active Record,然后Yii會(huì)運(yùn)行一個(gè)額外的查詢(xún),來(lái)確定表參與生成模型的架構(gòu)。你可以通過(guò)編輯注配置文件設(shè)置應(yīng)用程序,從而緩存這些架構(gòu):
return [ // ... 'components' => [ // ... 'db' => [ // ... 'enableSchemaCache' => true, 'schemaCacheDuration' => 3600, 'schemaCache' => 'cache', ], 'cache' => [ 'class' => 'yii\caching\FileCache', ], ], ];
最后,Yii有一個(gè)命令行工具,使前端資源極簡(jiǎn)化更容易。只需運(yùn)行以下命令來(lái)生成配置模板:
./yii asset/template config.php
然后,編輯該配置來(lái)指定工具,達(dá)到你想要的簡(jiǎn)化效果(如關(guān)閉編譯器, 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' => '', ], ];
接著,運(yùn)行此控制臺(tái)命令來(lái)實(shí)現(xiàn)壓縮:
'components' => [ // ... 'assetManager' => [ 'bundles' => require '/app/assets_compressed.php' ] ]
注意:你必須要手動(dòng)下載和安裝這些外部工具。
結(jié)論:
像任何一個(gè)好的框架一樣,Yii能夠幫助你快速創(chuàng)建流行的web應(yīng)用,并確保它們可以做的很好。通過(guò)做許多繁瑣的事情,它幫你你創(chuàng)建安全的和可測(cè)試的網(wǎng)站。你可以輕松的使用它提供的大部分功能,或者你也可以修改其中任何一個(gè)來(lái)適應(yīng)你的需求。真心建議你在你的下一個(gè)web項(xiàng)目中考慮一下它!
以上是“為什么選擇yii框架”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。