本章描述如何在你的應用程式中建立一個新的 「Hello」 頁面。為了實現這一目標,將建立一個操作和一個視圖:
應用將會分派頁面請求給動作 ( 推薦學習:yii教學)
動作將會依序渲染視圖呈現「Hello」 給最終使用者
貫穿整個章節,你將會掌握三件事:
##如何建立一個動作去回應請求,
如何建立一個視圖去建構回應內容,
#以及一個應用程式如何分派請求給動作。
建立動作
為了 “Hello”,需要建立一個 say 操作, 從請求中接收 message 參數並顯示給最終使用者。如果請求沒有提供 message 參數,操作將顯示預設參數 “Hello”。
信息: 操作是最终用户可以直接访问并执行的对象。 操作被组织在控制器中。 一个操作的执行结果就是最终用户收到的响应内容。
登入後複製
操作必須宣告在控制器中。為了簡單起見, 你可以直接在 SiteController 控制器裡聲明 say 操作。這個控制器是由檔案 controllers/SiteController.php 定義的。以下是一個操作的聲明:
<?php
namespace app\controllers;
use yii\web\Controller;
class SiteController extends Controller
{
// ...现存的代码...
public function actionSay($message = 'Hello')
{
return $this->render('say', ['message' => $message]);
}
}
登入後複製
在上述 SiteController 程式碼中,say 操作被定義為 actionSay 方法。 Yii 使用 action 前綴區分普通方法和操作。 action 前綴後面的名稱被對應為操作的 ID。
涉及到為操作命名時,你應該理解 Yii 如何處理操作 ID。操作 ID 總是被以小寫處理,如果一個操作 ID 由多個單字組成, 單字之間將由連字符連接(如 create-comment)。
操作 ID 在映射為方法名稱時移除了連字符,將每個單字首字母大寫,並加上 action 前綴。範例:操作 ID create-comment 相當於方法名稱 actionCreateComment。
上述程式碼中的操作方法接受一個參數 $message, 它的預設值是「Hello」(就像你設定 PHP 中其它函數或方法的預設值一樣)。當應用程式接收到請求並確定由 say 操作來回應請求時,應用程式將從請求的參數中尋找對應值傳入進來。
換句話說,如果請求包含一個 message 參數, 它的值是 “Goodbye”, 操作方法中的 $message 變數也會被填入 “Goodbye”。
在操作方法中,render() 被用來渲染一個 名為 say 的視圖檔。 message 參數也被傳入視圖,這樣就可以在裡面使用。操作方法會傳回渲染結果。結果會被應用程式接收並顯示給最終使用者的瀏覽器(作為整頁 HTML 的一部分)。
建立檢視
檢視是你用來產生回應內容的腳本。為了說 “Hello”, 你需要建立一個 say 視圖,以便顯示從操作方法傳來的 message 參數。
<?php
use yii\helpers\Html;
?>
<?= Html::encode($message) ?>
登入後複製
say 視圖應該儲存為 views/site/say.php 檔案。當一個操作中呼叫了 render() 方法時, 它將會按 views/控制器 ID/視圖名稱.php 路徑載入 PHP 檔案。
注意以上程式碼,message 參數在輸出之前被 HTML-encoded 方法處理過。這很有必要,當參數來自於最終使用者時,參數中可能隱含的惡意 JavaScript 程式碼會導致 跨站腳本(XSS)攻擊。
當然了,你大概會在 say 視圖裡放入更多內容。內容可以由 HTML 標籤,純文本, 甚至 PHP 語句組成。實際上 say 視圖就是一個由 render() 執行的 PHP 腳本。視圖腳本輸出的內容將會作為回應結果傳回給應用程式。應用將依序輸出結果給最終用戶。
試運行
建立完動作和檢視後,你就可以透過下面的URL 存取新頁面了:
http://hostname/index.php?r=site/say&message=Hello+World
登入後複製
這個URL 將會輸出包含「Hello World」 的頁面,頁面和應用程式裡的其它頁面使用同樣的頭部和尾部。
如果你省略 URL 中的 message 參數,你將會看到頁面只顯示 「Hello」。這是因為 message 被當作一個參數傳給 actionSay() 方法,省略它時,參數會使用預設的 「Hello」 來取代。
信息: 新页面和其它页面使用同样的头部和尾部是因为 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
登入後複製
以上是怎麼使用yii框架建立hello頁面的詳細內容。更多資訊請關注PHP中文網其他相關文章!