>[info]从上节课iWebShop的运行机制知道,初始化之后,第一个运行的部件就是控制器Controller, 这一节课就说明Controller的用法。
## 一、URL解析
上节讲到,iWebCore 接受用户的请求之后,URLManager会对URL进行分析,找到指定的控制器的一个Action运行程序。以下通过一个请求来说明如何解析的。
>[info]如请求为: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, 之后就是业务逻辑。
![](http://it.sunzoon.com/wp-content/uploads/2016/07/20160720181059.png)
products执行之后,显示商品页面如下:
![](http://it.sunzoon.com/wp-content/uploads/2016/07/20160720182148.png)
## 二、控制器的规则
* 控制器的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";
}
}
?>
~~~
运行得到的结果如下:
![](http://it.sunzoon.com/wp-content/uploads/2016/07/20160720195541.png)
## 四、如何给模板渲染数据
一共有 2 种方法可以把控制器里面的数据传递给模板,可以通过【类属性】和【$this->setRenderData】
~~~
function show()
{
$this->title="123456";//类属性
$this->setRenderData(array('title'=>'123456'));//setRenderData
$this->redirect("show");//跳转到控制器模板文件show中
}
~~~
第一行**【推荐】**:展示了第一种传值方式,通过类属性赋值操作,把字符串“1234567”赋值给了 $this->title
第二行: 展示了第二种传值方式, 通过控制器自身方法 setRenderData 把参数数组里面的键变成模板里面的变量
第三行:把视图引入进来, 引入控制器下的 show.html
>[danger]注意:如果要给视图渲染数据那么要引入的视图名字必须和 action 方法名字相同,即function方法名字叫 show,要显示的视图也必须叫 show。
当然如果方法名称和视图名称不一致却仍想渲染数据,需要在最后的 redirect方法中增加第二个参数——false 比如要把$this->title传递给 test1.html 视图,那么第三行就要写成: $this->redirect(‘test1’,false); 此时就可以实现显示 test1.html,并且带着 show方法里面的数据了
>[info]模板文件可以直接通过以下方式来显示数据
~~~
<h2>$this->title</h2>
<h3>$title</h3>
~~~
>[warning]如有不明白的地方,留言或是加入我们 “三众技术QQ交流群”一起讨论
## 关于我们
>[danger][三众科技](http://www.sunzoon.com)资讯平台——大道至简,悦你所阅!
>本教程由[三众简悦](http://it.sunzoon.com)原创,转载请注明出处,作者:bobball,由bobo整理成看云书籍
三众技术交流群:**543102562**
欢迎大家加入我们,共同讨论IT,互联网技术。同时可以扫描下面的二维码关注我们,谢谢!
![三众科技服务号](http://it.sunzoon.com/wp-content/uploads/2016/06/qrcode_for_gh_401d25b05314_344.jpg)