通常學習新的東西都會說聲Hello World!,今天我再說一次Hello World!,不過此次是用Yii框架來實現的。php
首先讓訪問時默認顯示「Hello」,須要建立一個 say 操做,從請求中接收 message 參數並顯示給用戶。若是請求沒有提供 message 參數,操做將顯示默認參數 「Hello」。web
在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。app
涉及到給操做命名時,你應該理解 Yii 是如何處理操做 ID。操做 ID 老是被以小寫處理,若是一個操做 ID 由多個單詞組成,單詞之間將由連字符鏈接(如 create-comment)。操做 ID 映射爲方法名時移除了連字符,將每一個單詞首字母大寫,並加上 action 前綴。 例子:操做 ID create-comment 至關於方法名 actionCreateComment。框架
代碼中的操做方法接收一個參數 $message,它的默認值是 「Hello」(就像你設置 PHP 中其它函數或方法的默認值同樣)。當應用接收到請求並肯定由 say 操做來響應請求時,應用將從請求的參數中尋找對應值傳入進來。換句話說,若是請求包含一個 message 參數,它的值是 「Hello World!」, 操做方法中的 $message 變量也將被填充爲 「Hello World!」(也就是替換了原有的變量值)。dom
在操做方法中,yii\web\Controller::render() 被用來渲染一個名爲 say 的視圖文件。 message 參數也被傳入視圖,這樣就能夠在裏面使用。操做方法會返回渲染結果。結果會被應用接收並顯示給用戶的瀏覽器(做爲整頁 HTML 的一部分)。yii
建立視圖ide
視圖是你用來生成響應內容的腳本。爲了說 「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。
本文到此結束,但願對你們有所幫助!!!