phalcon-入门篇5(请求与返回)

一曲冷凌霜 提交于 2019-12-03 08:19:02

#phalcon-入门篇5(请求与返回)#

本教程基于phalcon2.0.9版本

##前言## 先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台

在节后上班的第一条小编已经迫不及待的来为大家带来今天的phalcon教程,今天所讲的是phalcon中的请求和返回,只要我们一提到web应用无论是API还是MVC都离不开重要的两个组件,在phalcon内部提供了很多方便使用的内部函数和方法,那让我们来开始今天的phalcon之旅.

注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术

附上:

喵了个咪的博客:http://w-blog.cn

教程代码库:http://git.oschina.net/wenzhenxi/Phalcon-tutorial

phalcon官网地址:https://phalconphp.com

phalcon中文社区:http://www.iphalcon.cn/

##1. 请求##

要讲请求大家都在熟悉不过了,无非就是更具用户的行为获取参数进入到对应的处理逻辑处理控制器,phalcon也很注重这一点我们在控制器类中可以通过一下方式获取请求类实例

$request = $this->request;

当然大家可以自己进行实例:

use Phalcon\Http\Request;
$request = new Request();

但是应为机制问题自己实例出来的请求实例和从控制器中获取的实例是不同的,在请求中的区别主要是不能使用快捷的过滤器(其实问题不大,这类问题会在后续教程中深入研究)那么还是建议大家使用控制器自带的请求实例

###1.1 模拟请求工具###

说道这里有的人会问,请求有好多种还有参数在游览器URL中只能使用GET请求那么其他的请求方式要怎么办呢?

大家不用担心小编这就给大家介绍一个简单易用的模拟请求工具Postman需要在Chrome应用商店中下载(需要翻墙)

这个是主界面大家感受一下

###1.2 RequestController###

请求工具我们也已经有了,现在是万事俱备只欠东风了,接着我们建立一个控制器名字为RequestController建立indexAction方法我们在indexAction中加入如下代码:

$request = $this->request;

var_dump($request->get());                          //默认获取所有的请求参数返回的是array效果和获取$_REQUEST相同
var_dump($request->get('wen'));                     //获取摸个特定请求参数key的valuer和$_REQUEST['key']相同
var_dump($request->getQuery('url', null, 'url'));   //获取get请求参数,第二个参数为过滤类型,第三个参数为默认值
var_dump($request->getMethod());                    //获取请求的类型如果是post请求会返回"POST"
var_dump($request->isAjax());                       //判断请求是否为Ajax请求
var_dump($request->isPost());                       //判断是否是Post请求类似的有(isGet,isPut,isPatch,isHead,isDelete,isOptions等)
var_dump($request->getHeaders());                   //获取所有的Header,返回结果为数组
var_dump($request->getHeader('Content-Type'));      //获取Header中的的莫一个指定key的指
var_dump($request->getURI());                       //获取请求的URL比如phalcon.w-blog.cn/phalcon/Request获取的/phalcon/Request
var_dump($request->getHttpHost());                  //获取请求服务器的host比如phalcon.w-blog.cn/phalcon/Request获取的phalcon.w-blog.cn
var_dump($request->getServerAddress());             //获取当前服务器的IP地址
var_dump($request->getRawBody());                   //获取Raw请求json字符
var_dump($request->getJsonRawBody());               //获取Raw请求json字符并且转换成数组对象
var_dump($request->getScheme());                    //获取请求是http请求还是https请求
var_dump($request->getServer('REMOTE_ADDR'));       //等同于$_SERVER['REMOTE_ADDR']

echo "<h1>Request!</h1>";

现在可以试着请求一下我们会获得类似如下的结果:

这里强烈建议大家对每一个函数都亲身实地的去尝试一次会有比较好的了解

##2. 返回##

对于返回来说就有很多重形式了,比如对Header头定制,比如API应用直接打印返回类容,比如web应用需要做跳转到其他的模块,或者是跳转到别的网页地址,还有异常处理,相对于请求来说就相对比较多了,当然和请求一样我们需要获取返回实例通过一下方式获取请求类实例

$response = $this->response;

我们还是建立一个控制器名字为ResponseController建立indexAction方法我们在indexAction

###2.1 Header###

在某些情况下我们可能会需要返回一些特定的header我们可以使用如下方式

//Header类
$headers = $response->getHeaders();                         //获取Headers实例
$headers->set('header1', 'header1');                        //写入header实例一个header头
$response->setHeaders($headers);                            //设置一组返回的headers头
$response->getHeaders();                                    //查看当前的headers头
$response->setHeader('header2', 'header2');                 //单独设置一个返回的header头

以上两种方式都可以达到修改header的目的

###2.2 跳转###

在web应用下面经常的页面跳转是必须的,我们来看看下面代码的实现

//跳转类
//$response->redirect("Request/Index");                     //跳转到这个内部的Request模块Index方法(注意需要设置URL不然会跳转到public显示404)
//$response->redirect("http://www.baidu.com", true);        //跳转到这个外部地址
//$response->redirect("http://www.baidu.com", true, 302);   //跳转到这个外部地址并且给当前页面一个状态码

###2.3 return###

在API或者是其他场景下我们可能是去直接打印一系列字符串,还有返回http状态包括404报错或者是200成功此类的操作如下:

//return类
//$response->appendContent('test');                          //添加一段返回类容
//$response->setJsonContent(array('Response' => 'ok'));      //返回一个json,参数必须是数组
//$response->setContent("<h1>Hello!</h1>");                  //返回需要显示在页面上的内容
//$response->setStatusCode(404, "Not Found");                //返回http请求状态,以及msg
//return $response->send();                                  //打印响应

##3. 小结##

在这里还是强烈建议大家可以自己动手实践一下,看的感觉和自己写的感觉是完全不一样的,那我们回顾一下今天的内容,主要是对phalcon请求和返回做了简单的展示,基本上可以满足日常项目开发中的使用,代码都会放到开源中国phalcon教程代码库中大家可以自行下载查阅,也多谢大家一直以来的支持和关注.

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

Phalcon技术交流:364520707 PhalCon中文社区:287484785 欢迎大家的加入!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!