從放棄到入門-Yaf(從控制器說起)

Perma發表於2019-03-01

在上一篇文章中我們更加深如的研究學習了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

相關文章