首頁 php框架 YII 為什麼我們要選擇yii框架

為什麼我們要選擇yii框架

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

為什麼我們要選擇yii框架

背景介紹:

SitePoint曾發表過一篇文章,著重強調了一些頂級的PHP框架,當時並列排名第四的是Yii(發音Yee)框架,最新版本為1.1.14。最近,Yii發布了2.0版本。

(推薦教學:yii

然而我們對它進行報導的時候,它還處在RC狀態,如今剛好完整新版本發布,我覺得是時候重新考慮選擇它的因素了。

選擇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標籤中補充以下內容:
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仅支持加载,并且它只通过本地主机访问时才会加载。

现在,让我们来看下模型生成器吧:

為什麼我們要選擇yii框架

表名使用的是一个预输入控件,来试图猜测哪个表格与你的模型相关联,并且所有领域都有一个翻转工具,提示你如何填写出来。在用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(&#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;);
}
登入後複製

创建该表将会简单包括一个在运行在命令行的命令:

./yii migrate
登入後複製

然后移除该表:

./yii migrate/down
登入後複製

7、容易调整为最佳性能

大家都知道,一个网站很慢的话会很容易让用户产生不满,所以Yii提供了几种工具来帮助你从应用中“挤”出更多的速度。

所有Yii的缓存组件都是从yii/caching/Cache扩展来的,你可以选择任何一种,你想同时使用一个通用API扩展的缓存系统。你甚至可以注册多个高速缓存组件。Yii目前支持数据库和文件缓存,APC,Memcache, Redis, WinCache, XCache和Zend 数据缓存。

默认情况下,如果你正在使用Active Record,然后Yii会运行一个额外的查询,来确定表参与生成模型的架构。你可以通过编辑注配置文件设置应用程序,从而缓存这些架构:

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有一个命令行工具,使前端资源极简化更容易。只需运行以下命令来生成配置模板:

./yii asset/template config.php
登入後複製

然后,编辑该配置来指定工具,达到你想要的简化效果(如关闭编译器, 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;,
        ],
    ];
登入後複製

接着,运行此控制台命令来实现压缩:

&#39;components&#39; => [
    // ...
    &#39;assetManager&#39; => [
        &#39;bundles&#39; => require &#39;/app/assets_compressed.php&#39;
    ]
]
登入後複製

注意:你必须要手动下载和安装这些外部工具。

结论:

像任何一个好的框架一样,Yii能够帮助你快速创建流行的web应用,并确保它们可以做的很好。通过做许多繁琐的事情,它帮你你创建安全的和可测试的网站。你可以轻松的使用它提供的大部分功能,或者你也可以修改其中任何一个来适应你的需求。真心建议你在你的下一个web项目中考虑一下它!

以上是為什麼我們要選擇yii框架的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1667
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
如何評估Java框架商業支援的性價比 如何評估Java框架商業支援的性價比 Jun 05, 2024 pm 05:25 PM

評估Java框架商業支援的性價比涉及以下步驟:確定所需的保障等級和服務等級協定(SLA)保證。研究支持團隊的經驗和專業知識。考慮附加服務,如昇級、故障排除和效能最佳化。權衡商業支援成本與風險緩解和提高效率。

PHP 框架的學習曲線與其他語言框架相比如何? PHP 框架的學習曲線與其他語言框架相比如何? Jun 06, 2024 pm 12:41 PM

PHP框架的學習曲線取決於語言熟練度、框架複雜性、文件品質和社群支援。與Python框架相比,PHP框架的學習曲線較高,而與Ruby框架相比,則較低。與Java框架相比,PHP框架的學習曲線中等,但入門時間較短。

PHP 框架的輕量級選項如何影響應用程式效能? PHP 框架的輕量級選項如何影響應用程式效能? Jun 06, 2024 am 10:53 AM

輕量級PHP框架透過小體積和低資源消耗提升應用程式效能。其特點包括:體積小,啟動快,記憶體佔用低提升響應速度和吞吐量,降低資源消耗實戰案例:SlimFramework創建RESTAPI,僅500KB,高響應性、高吞吐量

golang框架文件最佳實踐 golang框架文件最佳實踐 Jun 04, 2024 pm 05:00 PM

編寫清晰全面的文件對於Golang框架至關重要。最佳實踐包括:遵循既定文件風格,例如Google的Go程式設計風格指南。使用清晰的組織結構,包括標題、子標題和列表,並提供導覽。提供全面且準確的信息,包括入門指南、API參考和概念。使用程式碼範例說明概念和使用方法。保持文件更新,追蹤變更並記錄新功能。提供支援和社群資源,例如GitHub問題和論壇。建立實際案例,如API文件。

如何為不同的應用場景選擇最佳的golang框架 如何為不同的應用場景選擇最佳的golang框架 Jun 05, 2024 pm 04:05 PM

根據應用場景選擇最佳Go框架:考慮應用類型、語言特性、效能需求、生態系統。常見Go框架:Gin(Web應用)、Echo(Web服務)、Fiber(高吞吐量)、gorm(ORM)、fasthttp(速度)。實戰案例:建構RESTAPI(Fiber),與資料庫互動(gorm)。選擇框架:效能關鍵選fasthttp,靈活Web應用選Gin/Echo,資料庫互動選gorm。

Java框架學習路線圖:不同領域中的最佳實踐 Java框架學習路線圖:不同領域中的最佳實踐 Jun 05, 2024 pm 08:53 PM

針對不同領域的Java框架學習路線圖:Web開發:SpringBoot和PlayFramework。持久層:Hibernate和JPA。服務端響應式程式設計:ReactorCore和SpringWebFlux。即時計算:ApacheStorm和ApacheSpark。雲端運算:AWSSDKforJava和GoogleCloudJava。

Golang框架學習過程中常見的迷思有哪些? Golang框架學習過程中常見的迷思有哪些? Jun 05, 2024 pm 09:59 PM

Go框架學習的迷思有以下5種:過度依賴框架,限制彈性。不遵循框架約定,程式碼難以維護。使用過時庫,帶來安全和相容性問題。過度使用包,混淆程式碼結構。忽視錯誤處理,導致意外行為和崩潰。

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

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

See all articles