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