国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) php框架 YII 為什么我們要選擇yii框架

為什么我們要選擇yii框架

Nov 23, 2020 pm 04:58 PM
yii 框架

為什么我們要選擇yii框架

背景介紹:

SitePoint曾發(fā)表過(guò)一篇文章,著重強(qiáng)調(diào)了一些頂級(jí)的PHP框架,當(dāng)時(shí)并列排名第四的是Yii(發(fā)音Yee)框架,最新版本為1.1.14。最近,Yii發(fā)布了2.0版本。

(推薦教程:yii

然而我們對(duì)它進(jìn)行報(bào)導(dǎo)的時(shí)候,它還處在RC狀態(tài),如今剛好完整新版本發(fā)布,我覺(jué)得是時(shí)候重新考慮一下選擇它的因素了。

選擇yii框架的七大理由:

1、安裝簡(jiǎn)單

對(duì)Web開(kāi)發(fā)者來(lái)說(shuō),時(shí)間就是金錢。沒(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類和接口,以及匿名函數(shù)。

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

use yii\helpers\Html;

Yii還可以定義別名,來(lái)幫助簡(jiǎn)化你的命名空間。在上面的例子中,use聲明會(huì)加載一個(gè)類定義,目錄中的默認(rèn)路徑為 /vendor/yiisoft/yii2/helpers。這個(gè)別名被定義在BaseYii類中第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è)類定義,目錄中的默認(rèn)路徑為 /vendor/yiisoft/yii2/helpers。這個(gè)別名被定義在BaseYii類中第79行:

3、高度的可擴(kuò)展性

Yii就像一套西裝,看起來(lái)很大,但其實(shí)卻很容易調(diào)整來(lái)滿足你的需求。實(shí)際上,框架的每個(gè)組件都是可擴(kuò)展的。舉一個(gè)簡(jiǎ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)容:
BodyIdAttribute?>>

最后,我想在主配置文件中添加如下內(nèi)容,讓Yii可以使用擴(kuò)展的View類,而不是默認(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類中增加了幾個(gè)方法,協(xié)助你在功能測(cè)試中的活動(dòng)記錄(Yii中的ORM)。舉例來(lái)說(shuō),如果你想看看是否成功創(chuàng)建了一個(gè)用戶名為“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è)伴侶功能,并且允許你檢查用戶提供的密碼是否與你存儲(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的輔助類。這個(gè)類有一個(gè)名為process的靜態(tài)方法,并且會(huì)使用popular filter library過(guò)濾出同名的輸出庫(kù)。

Yii還包括備用類,用來(lái)進(jìn)行用戶身份驗(yàn)證和授權(quán)。授權(quán)分為兩種類型:ACF(訪問(wèn)控制過(guò)濾器)和RBAC(基于角色的訪問(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用戶的訪問(wèn)login 和view行為,而不是create 行為。(? 是一個(gè)匿名用戶別名,@ 指的是已認(rèn)證用戶)。

RBAC是指那些用戶可以在整個(gè)應(yīng)用中執(zhí)行特定操作行為的更有效的方法。包括為用戶創(chuàng)建角色,定義app權(quán)限,然后使這些權(quán)限試用于相應(yīng)的角色。如果你想創(chuàng)建一個(gè)Moderator的角色,并允許分配給該角色的所有用戶批準(zhǔn)文章。

你也可以使用RBAC定義角色,它允許你在特定條件下,授權(quán)訪問(wèn)應(yīng)用的某些方面的自定義規(guī)則。例如,你可以創(chuàng)建一個(gè)規(guī)則,即允許用戶編輯自己的文章,而不是那些其他人創(chuàng)建的。

6、縮短開(kāi)發(fā)時(shí)間

大多數(shù)項(xiàng)目都會(huì)涉及一定的重復(fù)任務(wù),沒(méi)有人愿意浪費(fèi)時(shí)間。而Yii提供的一些工具可以幫助你減少在這些任務(wù)中所花費(fèi)的時(shí)間,將更多的時(shí)間用于定制讓客戶滿意的應(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ī)訪問(wèn)時(shí)才會(huì)加載。

現(xiàn)在,讓我們來(lái)看下模型生成器吧:

cd312d499ba0879addadc383d139b60.png

表名使用的是一個(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(&#39;user&#39;, [
        &#39;id&#39; => Schema::TYPE_PK,
        &#39;username&#39; => Schema::TYPE_STRING . &#39; NOT NULL&#39;,
        &#39;password_hash&#39; => Schema:: TYPE_STRING . &#39; NOT NULL&#39;
    ], null);
}

然后,保證我可以反向遷移,下面我將添加down 方法:

public function down()
{
$this->dropTable(&#39;user&#39;);
}

創(chuàng)建該表將會(huì)簡(jiǎn)單包括一個(gè)在運(yùn)行在命令行的命令:

./yii migrate

然后移除該表:

./yii migrate/down

7、容易調(diào)整為最佳性能

大家都知道,一個(gè)網(wǎng)站很慢的話會(huì)很容易讓用戶產(chǎ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è)額外的查詢,來(lái)確定表參與生成模型的架構(gòu)。你可以通過(guò)編輯注配置文件設(shè)置應(yīng)用程序,從而緩存這些架構(gòu):

return [
    // ...
    &#39;components&#39; => [
        // ...
        &#39;db&#39; => [
            // ...
            &#39;enableSchemaCache&#39; => true,
            &#39;schemaCacheDuration&#39; => 3600,
            &#39;schemaCache&#39; => &#39;cache&#39;,
        ],
        &#39;cache&#39; => [
            &#39;class&#39; => &#39;yii\caching\FileCache&#39;,
        ],
    ],
];

最后,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 [
        &#39;jsCompressor&#39; => &#39;java -jar compiler.jar --js {from} --js_output_file {to}&#39;,
        &#39;cssCompressor&#39; => &#39;java -jar yuicompressor.jar --type css {from} -o {to}&#39;,
        &#39;bundles&#39; => [
            // &#39;yii\web\YiiAsset&#39;,
            // &#39;yii\web\JqueryAsset&#39;,
        ],
        &#39;targets&#39; => [
            &#39;app\config\AllAsset&#39; => [
                &#39;basePath&#39; => &#39;path/to/web&#39;,
                &#39;baseUrl&#39; => &#39;&#39;,
                &#39;js&#39; => &#39;js/all-{hash}.js&#39;,
                &#39;css&#39; => &#39;css/all-{hash}.css&#39;,
            ],
        ],
        &#39;assetManager&#39; => [
            &#39;basePath&#39; => __DIR__,
            &#39;baseUrl&#39; => &#39;&#39;,
        ],
    ];

接著,運(yùn)行此控制臺(tái)命令來(lái)實(shí)現(xiàn)壓縮:

&#39;components&#39; => [
    // ...
    &#39;assetManager&#39; => [
        &#39;bundles&#39; => require &#39;/app/assets_compressed.php&#39;
    ]
]

注意:你必須要手動(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框架的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

Laravel 教程
1601
29
PHP教程
1502
276
PHP 框架的學(xué)習(xí)曲線與其他語(yǔ)言框架相比如何? PHP 框架的學(xué)習(xí)曲線與其他語(yǔ)言框架相比如何? Jun 06, 2024 pm 12:41 PM

PHP框架的學(xué)習(xí)曲線取決于語(yǔ)言熟練度、框架復(fù)雜性、文檔質(zhì)量和社區(qū)支持。與Python框架相比,PHP框架的學(xué)習(xí)曲線更高,而與Ruby框架相比,則較低。與Java框架相比,PHP框架的學(xué)習(xí)曲線中等,但入門(mén)時(shí)間較短。

php框架laravel和yii區(qū)別是什么 php框架laravel和yii區(qū)別是什么 Apr 30, 2025 pm 02:24 PM

Laravel和Yii的主要區(qū)別在于設(shè)計(jì)理念、功能特性和使用場(chǎng)景。1.Laravel注重開(kāi)發(fā)的簡(jiǎn)潔和愉悅,提供豐富的功能如EloquentORM和Artisan工具,適合快速開(kāi)發(fā)和初學(xué)者。2.Yii強(qiáng)調(diào)性能和效率,適用于高負(fù)載應(yīng)用,提供高效的ActiveRecord和緩存系統(tǒng),但學(xué)習(xí)曲線較陡。

PHP 框架的輕量級(jí)選項(xiàng)如何影響應(yīng)用程序性能? PHP 框架的輕量級(jí)選項(xiàng)如何影響應(yīng)用程序性能? Jun 06, 2024 am 10:53 AM

輕量級(jí)PHP框架通過(guò)小體積和低資源消耗提升應(yīng)用程序性能。其特點(diǎn)包括:體積小,啟動(dòng)快,內(nèi)存占用低提升響應(yīng)速度和吞吐量,降低資源消耗實(shí)戰(zhàn)案例:SlimFramework創(chuàng)建RESTAPI,僅500KB,高響應(yīng)性、高吞吐量

yii與Docker:容器化和部署您的應(yīng)用程序 yii與Docker:容器化和部署您的應(yīng)用程序 Apr 02, 2025 pm 02:13 PM

使用Docker容器化和部署Yii應(yīng)用的步驟包括:1.創(chuàng)建Dockerfile,定義鏡像構(gòu)建過(guò)程;2.使用DockerCompose啟動(dòng)Yii應(yīng)用和MySQL數(shù)據(jù)庫(kù);3.優(yōu)化鏡像大小和性能。這不僅涉及到具體的技術(shù)操作,還包括理解Dockerfile的工作原理和最佳實(shí)踐,以確保高效、可靠的部署。

Golang框架學(xué)習(xí)過(guò)程中常見(jiàn)的誤區(qū)有哪些? Golang框架學(xué)習(xí)過(guò)程中常見(jiàn)的誤區(qū)有哪些? Jun 05, 2024 pm 09:59 PM

Go框架學(xué)習(xí)的誤區(qū)有以下5種:過(guò)度依賴框架,限制靈活性。不遵循框架約定,代碼難維護(hù)。使用過(guò)時(shí)庫(kù),帶來(lái)安全和兼容性問(wèn)題。過(guò)度使用包,混淆代碼結(jié)構(gòu)。忽視錯(cuò)誤處理,導(dǎo)致意外行為和崩潰。

揭秘Java框架的常見(jiàn)故障疑慮 揭秘Java框架的常見(jiàn)故障疑慮 Jun 05, 2024 pm 09:37 PM

常見(jiàn)Java框架故障疑慮:連接池故障:增加連接池大小或使用監(jiān)視工具解決連接池耗盡問(wèn)題。Hibernate惰性加載異常:在使用惰性加載實(shí)體前明確初始化它們。JSON映射錯(cuò)誤:驗(yàn)證數(shù)據(jù)類型和JSON格式的正確性。過(guò)濾器和攔截器配置問(wèn)題:仔細(xì)檢查配置,確保預(yù)期工作方式。

將Laravel項(xiàng)目遷移到Y(jié)II是否容易? 將Laravel項(xiàng)目遷移到Y(jié)II是否容易? May 09, 2025 am 12:01 AM

crigatingalaravel projectToyiiishallingButachieffable withiefleflant.1)mapoutlaravel組件likeoutes,控制器和模型。2)Translatelaravel's sartisancancancommandeloequorentoottooyii的giiandeteverecordeba

YII開(kāi)發(fā)人員:高級(jí)與初中 YII開(kāi)發(fā)人員:高級(jí)與初中 May 24, 2025 am 12:10 AM

資深Yii開(kāi)發(fā)者與初級(jí)Yii開(kāi)發(fā)者的主要區(qū)別在于經(jīng)驗(yàn)、技能深度和思維方式。1.資深開(kāi)發(fā)者關(guān)注性能優(yōu)化和代碼重構(gòu),使用Yii的緩存機(jī)制等提升應(yīng)用性能。2.他們深入理解Yii的底層原理,參與架構(gòu)設(shè)計(jì)和技術(shù)決策,使用模塊化設(shè)計(jì)構(gòu)建靈活的應(yīng)用。3.資深開(kāi)發(fā)者注重項(xiàng)目整體規(guī)劃和長(zhǎng)遠(yuǎn)發(fā)展,扮演導(dǎo)師角色。初級(jí)開(kāi)發(fā)者則需通過(guò)學(xué)習(xí)和實(shí)踐逐步提升,最終成長(zhǎng)為資深開(kāi)發(fā)者。

See all articles