首页 » PHP教程 » php要求对象技巧_第4集Webman请求对象

php要求对象技巧_第4集Webman请求对象

访客 2024-12-11 0

扫一扫用手机浏览

文章目录 [+]

webman会自动将要求工具注入到action方法第一个参数中

<?php // 例子 namespace app\controller; use support\Request; class UserController { public function hello(Request $request) { $default_name = 'webman'; // 从get要求里得到name参数,如果没有通报name参数则返回$default_name $name = $request->get('name', $default_name); // 向浏览器返回字符串 return response('hello ' . $name); } }

a.通过$request工具我们能获取到要求干系的任何数据。

php要求对象技巧_第4集Webman请求对象

b.有时候我们想在其它类中获取当前要求的$request工具,这时候我们只要利用助手函数request()即可。

php要求对象技巧_第4集Webman请求对象
(图片来自网络侵删)

2、得到要求参数get:

获取全体get数组:$request->get();(如果要求没有get参数则返回一个空的数组)获取get数组的某一个值:$request->get('name');(如果get数组中不包含这个值则返回null)给get方法第二个参数通报一个默认值:$request->get('name', 'tom');(如果get数组中没找到对应值则返回默认值)

3、得到要求参数post:

获取全体post数组:$request->post();(如果要求没有post参数则返回一个空的数组)获取post数组的某一个值:$request->post('name');(如果post数组中不包含这个值则返回null)给post方法第二个参数通报一个默认值:$request->post('name', 'tom');(如果post数组中没找到对应值则返回默认值)

4、POST和GET凑集:

包含了post get 的凑集:$request->all();获取指定输入值:$request->input('name', $default_value);(从post get 的凑集中获取某个值)获取部分输入数据:

a.从post get的凑集中获取部分数据

b.$only = $request->only(['username', 'password']);(获取 username 和 password 组成的数组,如果对应的key没有则忽略)

c.$except = $request->except(['avatar', 'age']);(得到除了avatar 和 age 以外的所有输入)

5、判断要求办法:

判断是否是ajax要求:$request->isAjax();判断是否是pjax要求:$request->isPjax();判断是否是期待json返回:$request->expectsJson();判断客户端是否接管json返回:$request->acceptJson();

6、得到其他要求参数:

得到原始要求post包体:$post = $request->rawBody();(这个功能类似与 php-fpm里的 file_get_contents("php://input");操作。
用于得到http原始要求包体。
这在获取非application/x-www-form-urlencoded格式的post要求数据时很有用)获取header:$request->header();$request->header('host');$request->header('host', 'localhost');获取cookie:$request->cookie();$request->cookie('name');$request->cookie('name', 'tom');获取host:$request->host();$request->host(true);(如果要求的地址是非标准的80或者443端口,host信息可能会携带端口,如果不须要端口第一个参数可以传入true)获取要求方法:$request->method();(返回值可能是GET、POST、PUT、DELETE、OPTIONS、HEAD中的一个)获取要求uri:$request->uri();(返回要求的uri,包括path和queryString部分)获取要求路径:$request->path();(返回要求的path部分)获取要求queryString:$request->queryString();(返回要求的queryString部分)获取要求url:$request->url();(url()方法返回不带有Query 参数 的 URL)$request->fullUrl();(fullUrl()方法返回带有Query 参数 的 URL)把稳:url() 和 fullUrl() 没有返回协议部分(没有返回http或者https)获取要求HTTP版本:$request->protocolVersion();(返回字符串 1.1 或者1.0)获取要求sessionId:$request->sessionId();(返回字符串,由字母和数字组成)获取要求客户端IP:$request->getRemoteIp();获取要求客户端端口:$request->getRemotePort();获取要求客户端真实IP:$request->getRealIp($safe_mode=true);(当项目利用代理(例如nginx)时,利用$request->getRemoteIp()得到的每每是代理做事器IP(类似127.0.0.1 192.168.x.x)并非客户端真实IP。
这时候可以考试测验利用$request->getRealIp()得到客户端真实IP。
$request->getRealIp();事理是:如果创造客户端IP是内网IP,则考试测验从Client-Ip、X-Forwarded-For、X-Real-Ip、Client-Ip、Via HTTP头中获取真实IP。
如果$safe_mode为false,则赓续定客户端IP是否为内网IP(不屈安),直接考试测验从以上HTTP头中读取客户端IP数据。
如果HTTP头没有以上字段,则利用$request->getRemoteIp()的返回值作为结果返回。
由于HTTP头很容假造,以是此方法得到的客户端IP并非100%可信,尤其是$safe_mode为false时。
透过代理得到客户端真实IP的最可靠的方法是,已知安全的代理做事器IP,并且明确知道携带真实IP是哪个HTTP头,如果$request->getRemoteIp()返回的IP确认为已知的安全的代理做事器,然后通过$request->header('携带真实IP的HTTP头')获取真实IP。
)获取做事端IP:$request->getLocalIp();获取做事端端口:$request->getLocalPort();得到要求的插件名:$request->plugin;(非插件要求返回空字符串'',此特性须要webman>=1.4.0)得到要求的运用名:$request->app;(单运用的时候始终返回空字符串'',多运用的时候返回运用名;由于闭包函数不属于任何运用,以是来自闭包路由的要求$request->app始终返回空字符串'')得到要求的掌握器类名:$request->controller;(返回类似 app\controller\IndexController;由于闭包函数不属于任何掌握器,以是来自闭包路由的要求$request->controller始终返回空字符串'')得到要求的方法名:$request->action;(返回类似 index;由于闭包函数不属于任何掌握器,以是来自闭包路由的要求$request->action始终返回空字符串'')

7、开启掌握器复用:

把稳:开启掌握器复用时,要求不应该变动掌握器的任何属性,由于这些变动将影响后续要求。

<?phpnamespace app\controller;use support\Request;class FooController{ protected $model; public function update(Request $request, $id) { $model = $this->getModel($id); $model->update(); return response('ok'); } public function delete(Request $request, $id) { $model = $this->getModel($id); $model->delete(); return response('ok'); } protected function getModel($id) { // 该方法将在第一次要求 update?id=1 后会保留下 model // 如果再次要求 delete?id=2 时,会删除 1 的数据 if (!$this->model) { $this->model = Model::find($id); } return $this->model; }}

标签:

相关文章