天天看點

Yii--Hello World!

一般學習新的東西都會說聲Hello World!,今天我再說一次Hello World!,不過這次是用Yii架構來實作的。

首先讓通路時預設顯示“Hello”,需要建立一個 say 操作,從請求中接收 message 參數并顯示給使用者。如果請求沒有提供 message 參數,操作将顯示預設參數 “Hello”。

在controllers/SiteController.php檔案中

<?phpnamespace app\controllers;use yii\web\Controller;class SiteController extends Controller{   
    // ...其它代碼...
    public function actionSay($message = 'Hello'){        
        return $this->render('say', ['message' => $message]);
    }
}      

在 SiteController.php 代碼中,say 操作被定義為 actionSay 方法。Yii 使用 action 字首區分普通方法和操作。action 字首後面的名稱被映射為操作的 ID。

涉及到給操作命名時,你應該了解 Yii 是如何處理操作 ID。操作 ID 總是被以小寫處理,如果一個操作 ID 由多個單詞組成,單詞之間将由連字元連接配接(如 create-comment)。操作 ID 映射為方法名時移除了連字元,将每個單詞首字母大寫,并加上 action 字首。 例子:操作 ID create-comment 相當于方法名 actionCreateComment。

代碼中的操作方法接收一個參數 $message,它的預設值是 “Hello”(就像你設定 PHP 中其它函數或方法的預設值一樣)。當應用接收到請求并确定由 say 操作來響應請求時,應用将從請求的參數中尋找對應值傳入進來。換句話說,如果請求包含一個 message 參數,它的值是 “Hello World!”, 操作方法中的 $message 變量也将被填充為 “Hello World!”(也就是替換了原有的變量值)。

在操作方法中,yii\web\Controller::render() 被用來渲染一個名為 say 的視圖檔案。 message 參數也被傳入視圖,這樣就可以在裡面使用。操作方法會傳回渲染結果。結果會被應用接收并顯示給使用者的浏覽器(作為整頁 HTML 的一部分)。

建立視圖

視圖是你用來生成響應内容的腳本。為了說 “Hello World!”,你需要建立一個 say 視圖,以便顯示從操作方法中傳來的 message 參數,,首先在views/site檔案夾下建立一個say.php檔案,然後輸入如下代碼:

<?phpuse 
    yii\helpers\Html;
?>
<?= Html::encode($message) ?>      

當一個操作中調用了 yii\web\Controller::render() 方法時,它将會按 views/控制器 ID/視圖名.php 路徑加載 PHP 檔案。

注意以上代碼,message 參數在輸出之前被 yii\helpers\Html::encode() 方法處理過。這很有必要,當參數來自于使用者時,參數中可能隐含的惡意 JavaScript 代碼會導緻跨站腳本(XSS)攻擊。

你可能會在 say 視圖裡放入更多的内容。内容可以由 HTML 标簽,純文字,甚至 PHP 語句組成。實際上 say 視圖就是一個由 yii\web\Controller::render() 執行的 PHP 腳本。視圖腳本輸出的内容将會作為響應結果傳回給應用。應用将依次輸出結果給使用者。

運作

建立完操作和視圖後,你就可以通過下面的 URL 通路新頁面了:

http://yourdomain/index.php?r=site/say&message=Hello World!      

這個 URL 将會輸出包含 “Hello World!” 的頁面,頁面和應用裡的其它頁面使用同樣的頭部和尾部。

如果你省略 URL 中的 message 參數,将會看到頁面中隻顯示 “Hello”。這是因為 message 被作為一個參數傳給 actionSay() 方法,當省略它時,參數将使用預設的 “Hello” 代替。新頁面和其它頁面使用同樣的頭部和尾部,是因為 yii\web\Controller::render() 方法會自動把 say 視圖執行的結果嵌入稱為布局的檔案中,本例中是 views/layouts/main.php。