牛骨文教育服务平台(让学习变的简单)

第五课 控制器

从上节课iWebShop的运行机制知道,初始化之后,第一个运行的部件就是控制器Controller, 这一节课就说明Controller的用法。

一、URL解析

上节讲到,iWebCore 接受用户的请求之后,URLManager会对URL进行分析,找到指定的控制器的一个Action运行程序。以下通过一个请求来说明如何解析的。

如请求为:http://域名/index.php?controller=site&action=products&id=9

>>[danger]index.php为统一口文件
>>
>>controller=site&action=products 表示请求的是控制器site下的products函数
>>
>>id=9为传递参数,由action接收

那么,我们怎么知道这个请求执行了什么?先依次从controllers下找到文件site.php,打开文件找到function products,以上请求解析完成之后执行的就是这个函数,在这个函数中能看到获取了传递参数为id, 之后就是业务逻辑。

products执行之后,显示商品页面如下:

二、控制器的规则

  • 控制器的PHP文件必须放在controllers下,文件名都用小写字母,不要包含其他字符
  • 控制器就是一个类,这个类必须要继承IController,类名的第一个字母要大写
  • 类名和文件名要保持一致
class Site extends IController
{
	function init()
	{
         //初始化代码
	}

   function xxxx{
   //运行的程序代码
}

}
  • 每个类都有一个init方法,如上,在对象初始化时执行。
  • 控制器的开发遵循PHP面向对象的原则,一切PHP面向对象的规则都支持。

三、控制器实例

在controllers目录下建一个文件test.php,代码如下:

<?php
class Test extends IController
{
    public function helloworld(){
        echo "hello world";
    }
}
?>

运行得到的结果如下:

四、如何给模板渲染数据

一共有 2 种方法可以把控制器里面的数据传递给模板,可以通过【类属性】和【$this->setRenderData】

function show()
{
	$this->title="123456";//类属性
	$this->setRenderData(array("title"=>"123456"));//setRenderData
	$this->redirect("show");//跳转到控制器模板文件show中
}

第一行【推荐】:展示了第一种传值方式,通过类属性赋值操作,把字符串“1234567”赋值给了 $this->title
第二行: 展示了第二种传值方式, 通过控制器自身方法 setRenderData 把参数数组里面的键变成模板里面的变量
第三行:把视图引入进来, 引入控制器下的 show.html

注意:如果要给视图渲染数据那么要引入的视图名字必须和 action 方法名字相同,即function方法名字叫 show,要显示的视图也必须叫 show。

当然如果方法名称和视图名称不一致却仍想渲染数据,需要在最后的 redirect方法中增加第二个参数——false 比如要把$this->title传递给 test1.html 视图,那么第三行就要写成: $this->redirect(‘test1’,false); 此时就可以实现显示 test1.html,并且带着 show方法里面的数据了

模板文件可以直接通过以下方式来显示数据

<h2>$this->title</h2>
<h3>$title</h3>

如有不明白的地方,留言或是加入我们 “三众技术QQ交流群”一起讨论

关于我们

三众科技资讯平台——大道至简,悦你所阅!
>本教程由三众简悦原创,转载请注明出处,作者:bobball,由bobo整理成牛骨文书籍

三众技术交流群:543102562

欢迎大家加入我们,共同讨论IT,互联网技术。同时可以扫描下面的二维码关注我们,谢谢!

三众科技服务号