发表日期: 2021-04-26 09:20:04 浏览次数:130
如皋网站建设【如皋网络公司】如皋做网站、如皋微信公众号开发、如皋网站设计、如皋小程序制作
如皋市,简称“如”或“皋”,江苏省辖县级市,由南通市代管,江苏省历史文化名城。地处长江三角洲北翼,位于南通、泰州、苏州三市交界处,南与张家港市隔江相望,北与海安市、东与如东县连接、东南与南通市通州区毗邻,西与泰兴市、西南与靖江市接壤。全市总面积1477平方公里(不含长江水面),长江水面99平方千米。如皋长江岸线全长48千米,可直接利用长江深水岸线18.6千米。
如皋市被国际自然医学会评为世界六大长寿乡之一。 [1] 如皋市户籍人口约142万。截至2021年1月1日,全市80周岁以上高龄老人68031人,90周岁以上高龄老人10150人,百岁老人达525位,其中105岁以上达16位。 [2]
2019年6月17日,如皋被中华人民共和国住房和城乡建设部选取作为开展规范城市户外广告设施管理工作试点城市。 [3] 2019年10月8日,被评为2019年度全国综合实力百强县市、2019年度全国绿色发展百强县市、2019年度全国新型城镇化质量百强县市、2019全国营商环境百强县。 [4-6] 2020年12月,社科院发布《全国县域经济综合竞争力100强》,如皋排名第31 [7] 。
虽然我们约定统一使用?service=Class.Action的格式来传递接口服务名称,但如果项目有需要,也可以采用其他方式来传递。例如使用斜杠而非点号进行分割:?service=Class/Action,再进一步,使用r参数,即最终接口服务的参数格式为:?r=Class/Action。
如果需要采用其他传递接口服务名称的方式,则可以重写PhalApi_Request::getService()方法。以下是针对改用斜杠分割、并换用r参数名字的实现示例:
// $ vim ./Shop/Common/Request/Ch1.php<?phpclass Common_Request_Ch1 extends PhalApi_Request {
public function getService() {
// 优先返回自定义格式的接口服务名称
$service = $this->get('r');
if (!empty($service)) {
return str_replace('/', '.', $service);
}
return parent::getService();
}}复制代码实现好自定义的请求类后,需要在项目的入口文件./Public/shop/index.php进行注册。
// $ vim ./Public/shop/index.php//装载你的接口DI()->loader->addDirs('Shop');DI()->request = new Common_Request_Ch1();复制代码这样,除了原来的请求方式,还可以这样请求接口服务。
表2-5 使用?r=Class/Action格式定制后的方式
原来的方式 | 现在的方式 |
|---|---|
/shop/?service=Default.Index | ?r=Default/Index |
/shop/?service=Welcome.Say | ?r=Welcome/Say |
这里有几个注意事项:
1、重写后的方法需要转换为原始的接口服务格式,即:Class.Action
2、为保持兼容性,子类需兼容父类的实现。即在取不到自定义的接口服务名称参数时,应该返回原来的接口服务。
除了在框架编写代码实现其他接口服务的传递方式外,还可以通过Web服务器的规则Rewirte来实现。假设使用的是Nginx服务器,那么可以添加以下Rewrite配置。
if ( !-f $request_filename )
{
rewrite ^/shop/(.*)/(.*) /shop/?service=$1.$2;
}复制代码重启Nginx后,便可得到以下这样的效果。
表2-6 使用Nginx服务器Rewrite规则定制后的方式
原来的方式 | 现在的方式 |
|---|---|
/shop/?service=Default.Index | /shop/default/index |
/shop/?service=Welcome.Say | /shop/welcome/say |
此外,还有第三种指定传递方式的方案。使用第三方路由规则类库,然后通过简单的项目配置,从而实现更复杂、更丰富的规则定制。这部分后面会再进行讨论。
小结一下,不管是哪种定制方式,最终都是转换为框架最初约定的方式,即:?service=Class.Action。
何为数据源?这里说的数据源是指PhalApi从客户端接收参数的来源,主要分为三种:主数据源、备用数据源、其他数据源。下面分别对这三种数据源进行介绍,以及如何扩展定制。
如何指定主数据源?
主数据源是指作为默认接口参数来源的数据源,即在配置了接口参数规则后,PhalApi会比主数据源提取相应的参数从而进行验证、检测和转换等。默认情况下,使用$_REQUEST作为主数据源,即同时支持$_GET和$_POST参数。但在其他场景如单元测试,或者使用非HTTP/HTTPS协议时,则需要定制主数据源,以便切换到其他的途径。
指定主数据源有两种方式,一种是简单地在初始化DI()->request请求服务时通过PhalApi_Request的构造函数参数来指定。例如,假设要强制全部参数使用POST方式,那么可以:
DI()->request = new PhalApi_Request($_POST);复制代码
又或者,在单元测试中,我们经常看到这样的使用场景:
// 模拟测试数据$data = array(...);DI()->request = new PhalApi_Request($data);复制代码
这样,就可以很方便模拟构造一个接口服务请求的上下文环境,便于模拟进行请求。
另一种方式是稍微复杂一点的,是为了应对更复杂的业务场景,例如出于安全性考虑需要对客户端的数据包进行解密。这时需要重写并实现PhalApi_Request::genData($data)方法。其中参数$data即上面的构造函数参数,未指定时为NULL。
