HTTP请求和HTTP响应在任何Web应用程序中都发挥着重要作用.我们需要获取http请求的完整详细信息以便正确处理它.处理完毕后,我们需要通过http响应将处理后的数据发送给客户端.
FuelPHP提供了出色的请求和响应类分别读写HTTP请求和HTTP响应.让我们在本章中了解请求和回复类.
请求
在典型的Web应用程序中,应用程序需要解析当前请求的详细信息. Request 类提供了简单的方法来解析应用程序要处理的当前请求. Request 还提供了一个通过充当http客户端来创建新请求的选项.
创建新请求使应用程序能够请求应用程序的其他部分或完全是另一个应用程序并显示结果.让我们学习如何解析本章中的传入请求,并学习如何在HMVC请求章节中创建新请求.
解析请求
Request类提供了三种获取http请求详细信息的方法.它们如下,
有效 : 它是一个静态方法,它返回当前活动的http请求.
$currentRequest = Request::active();
param - 返回指定参数的值.它包含两个参数.如果参数在当前http请求中不可用,则第一个参数是参数名称,第二个参数是要返回的值.
$param = Request::active()->param('employee_name', 'none');
params - 它与param相同,除了它将所有参数作为数组返回.
$params = Request::active()->params();
示例
让我们创建一个简单的表单并使用请求类处理表单.
第1步 : 在员工控制器中创建一个新操作 action_request .
public function action_request() { }
第2步 : 调用请求方法以获取当前请求的所有参数.
public function action_request() { $params = Request::active()->params(); }
第3步 : 转储获取的参数数组.
public function action_request() { $params = Request::active()->params(); echo dump($params); }
第4步 : 更改路由以在路由配置文件中包含参数, fuel/app/config/routes.php
'employee/request(/:name)?' => array('employee/request', 'name' => 'name'),
现在,请求新操作, http://localhost:8080/employee/request/Jon,它将显示以下响应.
响应
响应类提供了创建http响应的选项.默认情况下,我们不需要在大多数情况下直接使用响应类.相反,我们使用 View (我们将在下一章中学习)来创建http响应. View隐藏了开发人员的http响应,并使用底层的 Response 类将响应发送到客户端.在高级情况下,我们直接使用 Response 类并创建完整的http响应.
创建响应
响应由标题和正文组成.主标题是http状态代码. Http状态代码是HTTP协议中定义的标准代码,用于描述响应.例如,状态代码200表示请求成功.
响应类提供了三个参数来创建http响应,
$ body : http响应的正文
$ status_code : http响应的状态代码
$ headers : 可选标题为数组
$body = "Hi, FuelPHP"; $headers = array ( 'Content-Type' => 'text/html', ); $response = new Response($body, 200, $headers);
让我们在员工控制器中创建一个新动作 action_response ,如下所示.
public function action_response() { $body = "Hi, FuelPHP"; $headers = array ('Content-Type' => 'text/html',); $response = new Response($body, 200, $headers); return $response; }
结果
方法
响应类提供了许多操作http响应的方法.它们如下,
forge : 它与响应类构造函数相同,如上所示.
return Response::forge("Hi, FuelPHP", 404);
重定向 : 它提供了重定向到URL而不是发送响应的选项.它包含以下参数,
a.url : 目的地网址b.方法 - 重定向方法. location (默认)和刷新c . redirect_code - http状态代码.默认值为302.
// use a URL Response::redirect('http://some-domain/index', 'refresh'); // or use a relative URI Response::redirect('employee/list');
redirect_back : 它类似于重定向方法,除了它重定向到上一页.如果没有可用的后页,我们可以指定重定向页面.
//如果没有后页,请转到员工列表页面 Response :: redirect_back('/employee/list','refresh');
set_status : 它提供了设置http状态代码的选项.
$ response = new Response(); $ response-> set_status(404);
set_header : 它提供了设置http标头的选项.
$ response = new Response(); $ response-> set_header('Content-Type','application/pdf'); //使用第三个参数替换先前的值$ response-> set_header('Content-Type','application/pdf','text/plain');
set_headers : 它与 set_header 相同,不同之处在于它提供了使用数组设置多个标题的选项.
$response = new Response(); $response->set_headers (array 'Content-Type' => 'application/pdf', 'Pragma' => 'no-cache', ));
get_header : 它可以获取先前设置的标题详细信息.
$response = new Response(); $response->set_header('Pragma', 'no-cache'); // returns 'no-cache' $header = $response->get_header('Pragma'); // returns array('Pragma' => 'no-cache') $header = $response->get_header();
body : 它提供了一个设置http响应正文的选项.
$response = new Response(); $response->body('Hi, FuelPHP'); // returns 'Hi, FuelPHP' $body = $response->body();
send_headers : 它将标头发送到请求的客户端. FuelPHP使用此方法将响应发送到客户端.通常,我们不需要使用此方法.
$response->send_headers();
发送 : 与send_headers相同,但是在http响应中可以限制标题.
// send the headers as well $response->send(true); // only send the body $response->send(false); $response->send();