从放弃到入门-Yaf(从控制器说起)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值