>[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)