溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

為什么選擇yii框架

發(fā)布時(shí)間:2021-01-14 10:49:17 來(lái)源:億速云 閱讀:153 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下為什么選擇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)看下模型生成器吧:

為什么選擇yii框架

表名使用的是一個(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è)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI