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。

上面 URL 中的參數 r 需要更多的解釋。它代表路由,是整個應用級的,指向特定操作的獨立 ID。路由格式是 控制器 ID/操作 ID。應用接收請求的時候會檢查參數,使用控制器 ID 去確定哪個控制器應該被用來處理請求。然後相應控制器將使用操作 ID 去確定哪個操作方法將被用來做具體工作。上述例子中,路由 site/say 將被解析至 SiteController 控制器和其中的 say 操作。因此 SiteController::actionSay() 方法將被調用處理請求。與操作一樣,一個應用中控制器同樣有唯一的 ID。控制器 ID 和操作 ID 使用同樣的命名規則。控制器的類名源自於控制器 ID,移除了連字符,每個單詞首字母大寫,並加上 Controller 後綴。例子:控制器 ID post-comment 相當於控制器類名 PostCommentController。

本文到此結束,希望對大家有所幫助!!!j_0017.gifj_0042.gif


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章