您好,登錄后才能下訂單哦!
小編給大家分享一下為什么選擇yii框架,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
選擇yii框架的七大理由:
1、安裝簡單
對Web開發者來說,時間就是金錢。沒有人會希望把自己的時間浪費在繁瑣的安裝和配置上。
Composer會來處理安裝程序。那如果你想要一個安裝過程的描述,Sitepoint最近發表了一篇關于此的文章,你可以參閱以下。而我比較喜歡傾向于使用基本的應用模板,哪怕我的站點上有一個單獨的前端和后端組件。相反,我選擇在我站點的后端部分使用一個模塊。(Yii模塊是迷你應用程序的最佳寫照,用來嵌入到你的主應用程序中。)
注:后面的很多例子中的目錄引用都使用到了簡單模板的目錄結構。
2、使用現代技術
Yii是一個純粹的OOP框架,它充分利用了PHP一些較先進的功能,包括延遲靜態綁定,SPL類和接口,以及匿名函數。
所有的類都被稱為命名空間,并允許你利用它們的PSR-4兼容的自動加載機。也就是說,包括Yii中的HTML輔助類,也是同樣如此簡單:
use yii\helpers\Html;
Yii還可以定義別名,來幫助簡化你的命名空間。在上面的例子中,use聲明會加載一個類定義,目錄中的默認路徑為 /vendor/yiisoft/yii2/helpers。這個別名被定義在BaseYii類中第79行:
public static $aliases = ['@yii' => __DIR__];
該框架本身是使用Composer安裝的,和它的擴展一樣。發布擴展的程序甚至和創建composer.json一樣簡單,在Github上托管你的代碼,并在Packagist上列出擴展。Yii還可以定義別名,來幫助簡化你的命名空間。在上面的例子中,use聲明會加載一個類定義,目錄中的默認路徑為 /vendor/yiisoft/yii2/helpers。這個別名被定義在BaseYii類中第79行:
3、高度的可擴展性
Yii就像一套西裝,看起來很大,但其實卻很容易調整來滿足你的需求。實際上,框架的每個組件都是可擴展的。舉一個簡單的例子就是,在你的觀點上增加了一個獨特的body ID。(如果想知道你為什么想這樣做,可以查看此文章)
首先,我會在我的app\components中創建一個名為View.php的文件,并添加以下內容:
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標簽中補充以下內容:
<body <?=$this->BodyIdAttribute?>>
最后,我想在主配置文件中添加如下內容,讓Yii可以使用擴展的View類,而不是默認的:
return[ // ... 'components'=> [ // ... 'view'=> [ 'class'=> 'app\components\View' ] ] ];
4、鼓勵測試
Yii與Codeception是緊密相連的。Codeception是一個了不起的PHP測試框架,有助于簡化應用創建部件、功能測試和驗收測試的過程。因為你寫的所有應用均是自動化測試,對吧?
測試過程中,Codeception擴展會使配置應用程序變得更簡單。只需簡單提供/tests/_config.php文件,即可配置你的測試程序。例如:
return[ 'components'=> [ 'mail'=> [ 'useFileTransport'=> true, ], 'urlManager'=> [ 'showScriptName'=> true, ], 'db'=> [ 'dsn'=> 'mysql:host=localhost;dbname=mysqldb_test', ], ], ];
使用該配置,將會發生如下幾種情況:
1、 在功能測試和驗收測試期間發送的任何一封郵件,將會被寫入一個文件中,而不是被發送。使用該配置,將會發生如下這種情況:
2、 在你測試中的URLs將會采取這種格式: index.php/controller/action 而不是這種:/controller/action
3、 測試將會使用你的測試數據庫,而不是你的產品數據庫。
存在Yii框架中的特殊模塊,同樣也存在Codeception內。它TestGuy類中增加了幾個方法,協助你在功能測試中的活動記錄(Yii中的ORM)。舉例來說,如果你想看看是否成功創建了一個用戶名為“testuser”的新user,你可以做以下幾點:
$I->amOnPage('register'); $I->fillField('username','testuser'); $I->fillField('password','qwerty'); $I->click('Register'); $I->seeRecord('app\models\User',array('name'=> 'testuser'));
5、簡化安全性
安全性是任何一個web應用的重要組成部分,幸運的是,Yii有一些很棒的功能可以幫你解決這方面的煩惱。
Yii帶有一個安全應用組件,其中公開的幾個方法可以幫助創建一個更安全的應用。其中一些比較有用的方法如下:
·generatePasswordHash: 從一個密碼和隨機因子生成一個安全的單向散列函數。這種方法為你編譯了一個隨機因子,然后通過PHP crypt函數功能提供的字符串創建了一個單項散列函數。
·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項目中考慮一下它!
以上是“為什么選擇yii框架”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。