選擇yii框架的理由是什么

選擇yii框架的理由是什么

選擇yii框架的七大理由:

(推薦教程:yii框架

1、安裝簡單

對Web開發者來說,時間就是金錢。沒有人會希望把自己的時間浪費在繁瑣的安裝和配置上。

Composer會來處理安裝程序。那如果你想要一個安裝過程的描述,Sitepoint最近發表了一篇關于此的文章,你可以參閱以下。而我比較喜歡傾向于使用基本的應用模板,哪怕我的站點上有一個單獨的前端和后端組件。相反,我選擇在我站點的后端部分使用一個模塊。(Yii模塊是迷你應用程序的最佳寫照,用來嵌入到你的主應用程序中。)

注:后面的很多例子中的目錄引用都使用到了簡單模板的目錄結構。

2、使用現代技術

Yii是一個純粹的OOP框架,它充分利用了PHP一些較先進的功能,包括延遲靜態綁定,SPL類和接口,以及匿名函數。

所有的類都被稱為命名空間,并允許你利用它們的PSR-4兼容的自動加載機。也就是說,包括Yii中的HTML輔助類,也是同樣如此簡單:

use yiihelpersHtml;

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。(如果想知道你為什么想這樣做,可以查看此文章)

首先,我會在我appcomponents中創建一個名為View.php的文件,并添加以下內容:

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

然后,在我的主布局文件(appviewslayoutsmain.php)中,我想在HTML的body標簽中補充以下內容:

BodyIdAttribute?>>

最后,我想在主配置文件中添加如下內容,讓Yii可以使用擴展的View類,而不是默認的:

return[     // ...     'components'=> [         // ...         'view'=> [             'class'=> 'appcomponentsView'         ]       ] ];

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('appmodelsUser',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了,它是通過在你的控制器中添加以下行為方法來實現的:

useyiifiltersAccessControl;   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' => 'yiigiiModule',         'allowedIPs' => ['127.0.0.1', '::1']     ] }

這樣就可以確保黨Yii的環境設置為開發的時候,Gii僅支持加載,并且它只通過本地主機訪問時才會加載。

現在,讓我們來看下模型生成器吧:

選擇yii框架的理由是什么

表名使用的是一個預輸入控件,來試圖猜測哪個表格與你的模型相關聯,并且所有領域都有一個翻轉工具,提示你如何填寫出來。在用Gii生成它之前,你可以預覽代碼,并且所有代碼模板是完全可以自定義的。

還有幾個命令行工具可以幫你為你的自動化測試創建數據庫遷移,信息翻譯(I18N:國際化)和數據庫fixtures?代碼模板。例如,你可以使用如下命令創建一個新的數據庫遷移文件:

yii migrate/create create_user_table

這將會在?{appdir}/migrations上創建一個新的遷移模板,看起來像這樣的:

<?php       use yiidbSchema;       class m140924_153425_create_user_table extends yiidbMigration     {         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' => 'yiicachingFileCache',         ],     ], ];

最后,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' => [             // 'yiiwebYiiAsset',             // 'yiiwebJqueryAsset',         ],         'targets' => [             'appconfigAllAsset' => [                 '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項目中考慮一下它!

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享