在上一篇文章中咱們更加深如的研究學習了yaf的目錄結構,以及public文件夾的完善。那麼這一篇咱們一塊兒來本身寫一個屬於咱們本身的控制器,以及控制器內容的介紹。咱們能夠把它叫作Hello.php,咱們如今愉快的開始把。php
咱們已經知道了控制器在哪一個目錄下面,那麼咱們如今來打開它。這時候咱們能夠看到裏面鳥哥爲咱們準備的兩個文件,分別是:Index.php、Error.php,那麼它們是什麼呢?看字面咱們應該很快就明白,一個是默認控制器,另外一個是關於異常捕捉的控制器。那麼咱們照貓畫虎在裏面再建立一個咱們今天的主角:Hello.php吧!建立好了咱們先不要着急寫,咱們先一塊兒研究一下Index.php裏面有些什麼。html
咱們打開它:數據庫
<?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;
}
}複製代碼
咱們如今看到默認有一些代碼,以及一些註釋,那麼咱們如今的任務就是要看看這些代碼以及註釋是什麼意思。bash
其次是咱們的首行代碼,也就是說: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。fetch
好了咱們如今繼續往下看,先看到的是:$get = $this->getRequest()->getQuery("get", "default value");,在這裏咱們暫且不研究它,咱們往下看。ui
這裏咱們看到 new 了一個 SampleModel() ,之因此 new 了它,是由於咱們下面要用到,繼續看下面:this
$this->getView()->assign("content", $model->selectSample());
$this->getView()->assign("name", $name);複製代碼
這裏咱們看到了一個getView()方法,這個方法是獲取當前的視圖引擎的,要說明的是該方法不須要參數。而後咱們經過assign()爲視圖引擎分配一個模板變量, 在視圖模板中能夠直接用php語法輸出。
另外在這裏咱們看到content的值爲SampleModel的一個方法,那麼咱們能夠去看看它是什麼?咱們進入models文件夾下的Sample.php文件,看到:spa
<?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;
?>複製代碼