程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> Yii2.0基礎框架

Yii2.0基礎框架

編輯:PHP綜合

緣起

因為一個月的短暫停留,我在給朋友搞事情,所以Yii系列的文章耽擱了很長時間,現在又重拾當時的知識,給大伙好好撸下這一系列的博客

提起Yii,雖然是國外的開發者搞的,但是它的作者是華人,這才是讓我們引以為豪的,如果以後有機會薛強回國大力發展PHP事業,我肯定回去他麾下搞事情,為PHP在國內的發展貢獻自己的一份力,雖然現在沒有這個能力,這不薛強沒回來嘛,回來的話那時的我肯定可以的~哈哈哈~

領英上強哥的背景如下:

職務:MicroStrategy 公司擔任構架師

地址:美國首都華盛頓 Metro Area

教育:

杜克大學·計算機科學·博士

浙江大學·計算機科學·碩士

強哥是土生土長的中國人,在美國有固定全職工作,英文很好,同時中文一點問題都沒有!!

好了,話步前言,上節我們已經將Yii2.0完整的安裝到我們的機器中啦,在浏覽器中輸入下面的地址,你就可以訪問你的服務器應用啦~

http://服務器IP/app/yii/web/index.php

出現下面的命令那就對啦~

整體結構

assets文件夾:assets的作用是方便模塊化,插件化的,一般來說出於安全原因不允許通過url訪問protected下面的文件 ,但是我們又希望將module單獨出來,所以需要使用發布,即將一個目錄下的文件復制一份到assets下面方便通過url訪問。

commands文件夾:控制台腳本存放的地方,自動運行腳本

config文件夾:配置文件存放的文件夾

controller文件夾:MVC中C文件存放的文件夾

mail文件夾:郵件發送目錄,具體干啥的我還在摸索中哈~

models文件夾:MVC中M文件存放的文件夾

runtime:日志文件

tests:測試腳本文件夾

vendor:第三方組件存放,composer下載的組件存放的文件夾,自動幫你autoload

views:MVC中V存放的文件夾

web:web主應用入口腳本存放的位置

以上是整個文件夾的布局,裡面的各個文件有啥用,我會在後續的【應用Yii2.0搭建後台應用框架】中詳細介紹

我這一系列的文章均來自於Yii中文網中對Yii2.0的權威指南,感謝國內開發者對社區的貢獻,感謝翻譯的人,讓我們免去了百度翻譯之苦。

如果大家不太喜歡我的描述,可以去看一下官方對Yii2.0的解釋,很詳細,但很官方,不會調戲你^_^

官方文檔【中文版】:http://www.yiichina.com/doc/guide/2.0

Yii 應用參照模型-視圖-控制器 (MVC)設計模式來組織。不懂MVC?這麼說吧,不管是前端應用還是後端應用,首當其沖的設計模式就是MVC。所以了解它相當有必要!

M模型代表數據、業務邏輯和規則;V視圖展示模型的輸出;C控制器接受出入並將其轉換為模型和視圖命令。

這就是Yii的整個框架結構設計,我們的MVC就是其中的控制器,視圖和模型,他們的各自作用上面也講了下,一般的後端應用,M表示從數據庫、第三方鏈接、本地文件中獲取的數據進行處理,整理,在交給到V端,V端的作用一般是在頁面中反饋給用戶的頁面,如果是以數據的形式返回給用戶,那這個V層就不用做過多的渲染。C層的話主要是連接兩者的作用,C層獲取到用戶的請求,傳給M層,M層處理好數據,反饋給C層,C層再將數據給到V層,V層展示給用戶。MVC模型的便捷之處就是邏輯清晰,每個模塊負責自己的事,有條有理,非常便於初學者理解,是一個入門的模型。

除此之外,Yii還包含其他邏輯處理塊,比方說上面圖中的入口腳本【調用應用一開始必被調用的腳本文件】,應用主體【Yii::$app全局可訪問對象】,應用組件【全局通用的一些工具集】,模塊【業務邏輯單元,每個業務邏輯一個模塊,會讓代碼很清晰】,過濾器【規范行為的對象,在控制器執行之前或之後調用,定義一類特殊的行為】,前端資源和小部件我們先不講,因為是涉及到前端的一些組件內容,後面我會單獨開辟一個系列來講前端知識,我出這一系列的目的主要是針對後台應用~

入口腳本

心細的朋友可能早就發現了,為啥我們在上面的訪問鏈接中後面有個index.php,對,就是它,它就是入口腳本,每次web請求都必須經過它!

http://172.16.122.58/app/yii/web/index.php

一般他都是在web這個目錄下面的,這個是web應用的入口腳本。

還有個入口腳本是啥呢,控制台腳本,下面的那個叫yii的php腳本,啥作用呢,你們想想啊,電商後台中,如果有很多人要調整庫存,是不是調整一次就給改一次呀,肯定不會呀,庫存操作如果調用數據庫太頻繁了,數據庫肯定扛不住的,我們的做法就是先放到類似於Redis的緩存中,等到一定量的時候,或者有個1秒鐘的時候我們給同步一次數據庫,同步的方式就是調用控制台腳本啦,配合Linux的crontab,完美解決數據庫調用過於頻繁的問題。控制台腳本後面我們會介紹,一般業務線中用的還挺多的。

入口腳本主要完成以下工作:

定義全局常量;

注冊 Composer 自動加載器;

包含 Yii 類文件;

加載應用配置;

創建一個應用實例並配置;

調用 yii\base\Application::run() 來處理請求。

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/../config/web.php');

(new yii\web\Application($config))->run();

入口腳本是定義全局常量的最好地方,話雖如此,不建議在這裡定義啥全局變量!Yii 支持以下三個常量:

YII_DEBUG:標識應用是否運行在調試模式。當在調試模式下,應用會保留更多日志信息,如果拋出異常,會顯示詳細的錯誤調用堆棧。因此,調試模式主要適合在開發階段使用,YII_DEBUG 默認值為 false。

YII_ENV:標識應用運行的環境。YII_ENV 默認值為 'prod',表示應用運行在線上產品環境。

YII_ENABLE_ERROR_HANDLER:標識是否啟用 Yii 提供的錯誤處理,默認為 true。

autoload.php,讀過我之前文章的朋友肯定對他有印象,PSR-4,自動加載器哈,這個是注冊composer自動加載器的。

Yii.php,包含Yii類的文件路徑。

倒數第二行是加載應用配置。最後一行是運行一個應用,這裡面的$config【web.php】這個文件會在後面詳細解答。

應用主體配置

應用主體在入口腳本中創建並能通過表達式 \Yii::$app 全局范圍內訪問。訪問的變量定義在哪兒呢,由於應用主體配置比較復雜,就是剛剛提到的$config,config文件夾中的web.php文件。後面比較復雜的配置都可以放到單個文件中,這是個技巧,即減少了配置文件的代碼行數,也將整個框架清晰很多。

這個裡面定義了很多屬性,我們來分別看下吧。

<?php

$params = require(__DIR__ . '/params.php');

$config = [

params這個參數裡的所有變量就被定義在params.php這個文件裡面。

下面是我的項目中配置的一些文件在上方定義

<?php

$params = require(__DIR__ . '/params.php');
$rules = require(__DIR__ . '/rules.php');
$aliases = require(__DIR__ . '/aliases.php');
$cacheConfig = require(__DIR__ . '/cache.php');

這裡面主要是params參數,rules路由規則,aliases別名規則,cacheConfig緩存配置,你可能會懷疑,為何db這麼關鍵的沒有配置上來,db是區分環境的,在index.php中會區分stable環境、pro環境還是測試環境做區分。

我們還是回到我們的Yii源碼,配置文件上方配置了params所在的文件,

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => 'A9BMCrvbxuCEnE39rVpOUECgcBJTnzUH',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'db' => require(__DIR__ . '/db.php'),
        /*
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            ],
        ],
        */
    ],
    'params' => $params,
];

這邊有幾個屬性,id、basePath、bootstrap和components。其他還有幾個比較重要的屬性:aliases、language、modules。

id

yii\base\Application::id 屬性用來區分其他應用的唯一標識ID。一般配置為程序名稱。必要屬性之一。

basePath

yii\base\Application::basePath 指定該應用的根目錄。系統預定義 @app 代表這個路徑。 你如果需要require目錄內的文件,可以使用這個方式找到對應文件。另外一個必要屬性,這個是必須得配置的。

bootstrap

這個屬性很實用,它允許你用數組指定啟動階段yii\base\Application::bootstrap()需要運行的組件。一般後端應用中配置個

    'bootstrap' => ['log'],

即可。

components

這是最重要的屬性,它允許你注冊多個在其他地方使用的應用組件。比方說session、log、db和cache啊,都在這裡面配置的,具體的下一節應用組件中會講到。

aliases

該屬性允許你用一個數組定義多個別名。數組的key為別名名稱,值為對應的路徑。

[
    'aliases' => [
        '@name1' => 'path/to/path1',
        '@name2' => 'path/to/path2',
    ],
]

我的配置裡面都是設置的extension擴展類的別名,extension裡面放置一些基礎調用類,比方說CURL、微信支付等等的。

[
    '@ext' => dirname(__DIR__) . '/extensions',
]
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved