Reaper

闭包支持_帮助文档_Thinkphp手册
闭包定义我们可以使用闭包的方式定义一些特殊需求的路由,而不需要执行控制器的操作方法了,例如:'URL_RO...
扫描右侧二维码阅读全文
04
2018/03

闭包支持_帮助文档_Thinkphp手册

闭包定义

我们可以使用闭包的方式定义一些特殊需求的路由,而不需要执行控制器的操作方法了,例如:

'URL_ROUTE_RULES'=>array(     'test'        =>          function(){              echo 'just test';         },     'hello/:name' =>          function($name){              echo 'Hello,'.$name;         } )
## 参数传递 闭包定义的参数传递在规则路由和正则路由的两种情况下有所区别。 ##### 规则路由 规则路由的参数传递比较简单:
'hello/:name' =>     function($name){         echo 'Hello,'.$name;    }
规则路由中定义的动态变量的名称 就是闭包函数中的参数名称,不分次序。 因此,如果我们访问的URL地址是: http://serverName/Home/hello/thinkPHP 则浏览器输出的结果是: Hello,thinkPHP 如果多个参数可以使用:
'hello/:name' =>      function($name){          echo 'Hello,'.$name;     }
##### 正则路由 如果是正则路由的话,闭包函数中的参数就以正则中出现的参数次序来传递,例如:
'blog/:year/:month' =>      function($year,$month){          echo 'year='.$year.'&month='.$month;     }
如果我们访问: http://serverName/Home/new/2013/03 浏览器输出结果是: year=2013&month=03 ## 继续执行 默认的情况下,使用闭包定义路由的话,一旦匹配到路由规则,执行完闭包方法之后,就会中止后续执行。如果希望闭包函数执行后,后续的程序继续执行,可以在闭包函数中使用布尔类型的返回值,例如:
'hello/:name' =>      function($name){&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#39;Hello,&#39;.$name.'<br/>';         $_SERVER[&#39;PATH_INFO&#39;]&nbsp;=&nbsp;&#39;blog/read/name/&#39;.$name;         return false;     }
该路由定义中的闭包函数首先执行了一段输出代码,然后重新设置了$_SERVER['PATH_INFO']变量,交给后续的程序继续执行,因为返回值是false,所以会继续执行控制器和操作的检测,从而会执行Blog控制器的read操作方法。 假设blog控制器中的read操作方法代码如下:
public function read($name){ &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&#39;read,&#39;.$name.'!<br/>'; }
如果我们访问的URL地址是: http://serverName/Home/hello/thinkPHP 则浏览器输出的结果是:
Hello,thinkphp read,thinkphp!
</section> </article>
最后修改:2018 年 03 月 24 日 03 : 41 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论