您现于de位置乃:亚博 > APP 开发

亚博 2015-11-13 APP 开发 814

闭包支持_帮助文档_app开发技巧

闭包定义

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

'URL_ROUTE_RULES'=>array(
    'test'        => 
        function(){ 
            echo 'just test';
        },
    'hello/:name' => 
        function($name){ 
            echo 'Hello,'.$name;
        }
)

参数传递

闭包定义de参数传递于规则路由和正则路由de两种情况下有所区别.

规则路由

规则路由de参数传递比较简单:

'hello/:name' =>     function($name){         echo 'Hello,'.$name;    }

规则路由中定义de动态变量de名称 就乃闭包函数中de参数名称 不分次序. 因此 如果我们访问deURL地址乃: http://serverName/Home/hello/thinkapp

则浏览器输出de结果乃: Hello,thinkapp

如果多个参数可以使用:

'hello/:name' => 
    function($name){ 
        echo 'Hello,'.$name;
    }
正则路由

如果乃正则路由de话 闭包函数中de参数就以正则中出现de参数次序来传递 例如:

'blog/:year/:month' => 
    function($year,$month){ 
        echo 'year='.$year.'&month='.$month;
    }

如果我们访问: http://serverName/Home/new/2013/03 浏览器输出结果乃: year=2013&month=03

继续执行

默认de情况下 使用闭包定义路由de话 1旦匹配到路由规则 执行完闭包方法之后 就会中止后续执行.如果希望闭包函数执行后 后续de程序继续执行 可以于闭包函数中使用布尔类型de返回值 例如:

'hello/:name' => 
    function($name){ 
        echo 'Hello,'.$name.'<br/>';
        $_SERVER['PATH_INFO'] = 'blog/read/name/'.$name;
        return false;
    }

该路由定义中de闭包函数首先执行了1段输出代码 然后重新设置了$_SERVER['PATH_INFO']变量 交给后续de程序继续执行 因为返回值乃false 所以会继续执行控制器和操作de检测 从而会执行Blog控制器deread操作方法.

假设blog控制器中deread操作方法代码如下:

public function read($name){
    echo 'read,'.$name.'!<br/>';
}

如果我们访问deURL地址乃: http://serverName/Home/hello/thinkapp

则浏览器输出de结果乃:

Hello,thinkapp
read,thinkapp!


评论