Request 请求实例
Request通过Application的__construct()内初始化。
Web环境下的WebRequest管理所有外部输入参数,包括$_GET, $_POST,$_SERVER, $_COOKIE, $_REQUEST, $_ENV, $_FILE;
Console环境下的ConsoleRequest管理命令行参数, 包括$_arg等。
为了符合安全和框架的编码规范,非特殊情况,除非通过Request实例引用外部参数,禁止使用以上全局变量$_GET, $_POST,$_SERVER, $_COOKIE, $_REQUEST, $_ENV, $_FILE。
Request的实例获取
为保持Model的无状态模式,Request禁止在Model层内调用。
// 支持参数注入和自动注解// controller/*** @autowired 自动注入*/protected Request $request;/*** 参数注入*/public function __construct(Request $request){...}/*** @autowired 自动注入*/public function getReq(Request $request){...}// 也可通过别名调用public function getRequestByAlias(ContainerInterface $container){return $container->get('app.request');}
Request 的使用
// 通过.分隔子节点// /index.php?c=main&a=index"echo $request->get['c'];// output "main"// 通过过滤器格式化输入参数echo $request->get->formatString('c', 'default');// output "main";// post$request->post;// cookie;$request->cookie;// server;$request->server;// file
Request负责Application内MVC流程的外部请求参数管理。
Request不破坏已有全局变量的参数。
Request管理路由匹配的控制器Controller,动作Action, 模块Moudle的参数名和值。
Request的参数初始化仅支持Readonly,不允许变更,防止多人协作时的外部参数意外变更。
/*** 请求体基类** @package Tiny.MVC.Request* @since 2017年4月4日下午8:47:29* @final 2017年4月4日下午8:47:29*/abstract class Request{/*** 当前应用实例** @param ApplicationBase $app*/public function __construct(ApplicationBase $app){$this->application = $app;if (!key_exists('argv', $_SERVER)) {$_SERVER['argv'] = [];}$this->server = new Readonly($_SERVER);unset($_SERVER);$this->param = new Readonly();$this->routeParam = new Readonly();$this->initData();}...}class WebRequest extend Request{/**** {@inheritDoc}* @see \Tiny\MVC\Request\Request::initData()