在上一篇文章中我們更加深如的研究學習了yaf的目錄結構,以及public資料夾的完善。那麼這一篇我們一起來自己寫一個屬於我們自己的控制器,以及控制器內容的介紹。我們可以把它叫做Hello.php,我們現在愉快的開始把。
Hello.php控制器
我們已經知道了控制器在哪個目錄下面,那麼我們現在來開啟它。這時候我們可以看到裡面鳥哥為我們準備的兩個檔案,分別是:Index.php、Error.php,那麼它們是什麼呢?看字面我們應該很快就明白,一個是預設控制器,另一個是關於異常捕捉的控制器。那麼我們照貓畫虎在裡面再建立一個我們今天的主角:Hello.php吧!建立好了我們先不要著急寫,我們先一起研究一下Index.php裡面有些什麼。
Index.php
我們開啟它:
<?php
/**
* @name IndexController
* @author mateng
* @desc 預設控制器
* @see http://www.php.net/manual/en/class.yaf-controller-abstract.php
*/
class IndexController extends Yaf_Controller_Abstract {
/**
* 預設動作
* Yaf支援直接把Yaf_Request_Abstract::getParam()得到的同名引數作為Action的形參
* 對於如下的例子, 當訪問http://yourhost/lbxd/index/index/index/name/mateng 的時候, 你就會發現不同
*/
public function indexAction($name = "Stranger") {
//1. fetch query
$get = $this->getRequest()->getQuery("get", "default value");
//2. fetch model
$model = new SampleModel();
//3. assign
$this->getView()->assign("content", $model->selectSample());
$this->getView()->assign("name", $name);
//4. render by Yaf, 如果這裡返回FALSE, Yaf將不會呼叫自動檢視引擎Render模板
return TRUE;
}
}複製程式碼
我們現在看到預設有一些程式碼,以及一些註釋,那麼我們現在的任務就是要看看這些程式碼以及註釋是什麼意思。
- 首先我們看到前幾行註釋分別是:控制器名稱、作者、說明等。
-
其次是我們的首行程式碼,也就是說:Index這個控制器繼承Yaf_Controller_Abstract這個類,那麼問題來了Yaf_Controller_Abstract這個類裡面有些什麼?我們現在看看。
首先要說明Yaf_Controller_Abstract類是yaf的一個內建類,所以大家沒有必要去翻框架檔案,也不可能翻到的。順便發個手冊地址:php.net/manual/zh/c… 裡面有詳細的說明。現階段我們要記住的就是:每個使用者自定義controller控制器都應當繼承Yaf_Controller_Abstract。 -
現在我們往下面看,又是幾行註釋,裡面提到了Yaf_Request_Abstract這個類,還有它的一個靜態方法getParam(),既然提到了那我們就有必要了解一下。
鳥哥在手冊中是這麼說的:“獲取當前請求中的所有路由引數, 路由引數不是指$_GET或者$_POST, 而是在路由過程中, 路由協議根據Request Uri分析出的請求引數.”。也就是說我們請求:http://localhost/lbxd/public/index.php/index/index/index/name/1 這個連線的時候,其中name的引數是1,此時與Action的實參同名,這樣就會替代Action的實參,作為它的形參,如:public function indexAction($name = "Stranger") { echo $name; }複製程式碼
以上 $name 最後會輸出1。
-
好了我們現在繼續往下看,先看到的是:$get = $this->getRequest()->getQuery(“get”, “default value”);,在這裡我們暫且不研究它,我們往下看。
-
這裡我們看到 new 了一個 SampleModel() ,之所以 new 了它,是因為我們下面要用到,繼續看下面:
$this->getView()->assign("content", $model->selectSample()); $this->getView()->assign("name", $name);複製程式碼
這裡我們看到了一個getView()方法,這個方法是獲取當前的檢視引擎的,要說明的是該方法不需要引數。然後我們通過assign()為檢視引擎分配一個模板變數, 在檢視模板中可以直接用php語法輸出。
另外在這裡我們看到content的值為SampleModel的一個方法,那麼我們可以去看看它是什麼?我們進入models檔案夾下的Sample.php檔案,看到:<?php /** * @name SampleModel * @desc sample資料獲取類, 可以訪問資料庫,檔案,其它系統等 * @author mateng */ class SampleModel { public function __construct() { } public function selectSample() { return `Hello World!`; } public function insertSample($arrInfo) { return true; } }複製程式碼
在這裡return了一個:`Hello World!` 也就說明模版中<?=$content?>是:Hello World!。
-
最後我們看到一個 return TRUE; 如果這裡返回FALSE, Yaf將不會呼叫自動檢視引擎Render模板。
接下來我們看看模板檔案裡面是什麼,在上一篇中已經說了view的目錄結構,在這裡就不再囉嗦了,直接看程式碼(index/index.phtml):
<?php
echo $content, " I am ", $name;
?>複製程式碼
好了那麼我們來建立一個自己的Hello控制器吧:
Hello.php
<?php
/**
* Created by PhpStorm.
* User: mateng
* Date: 2017/11/10
* Time: 上午12:08
*/
class HelloController extends Yaf_Controller_Abstract {
public function indexAction($name = "Stranger") {
$this->getView()->assign("content", "Hello,Controller!");
return TRUE;
}
}複製程式碼
index.phtml
<?php
echo $content;
?>複製程式碼
目錄結構:
然後訪問:http://localhost/lbxd/public/index.php/index/hello/index
好了,這篇文章就到這裡了,下一篇文章我們一起來建立一個自己的 SampleModel