Slim框架学习笔记之响应Response

Slim框架学习笔记之响应Response1.概述每个Slim应用程序实例都有一个响应对象。虽然每个Slim应用程序都包含一个默认的响应对象,但\Slim\Http\Response该类

大家好,欢迎来到IT知识分享网。

1.概述

每个Slim应用程序实例都有一个响应对象。响应对象是Slim应用程序返回HTTP客户端的HTTP响应的抽象。虽然每个Slim应用程序都包含一个默认的响应对象,但\Slim\Http\Response该类是幂等的; 您可以随意(在中间件或Slim应用程序的其他位置)实例化该类,而不会影响整个应用程序。您可以使用以下命令获取对Slim应用程序的响应对象的引用:

<?php

$app = new \Slim\Slim();

$app->response;

HTTP响应有三个主要属性:

Status

Header

Body

响应对象提供了下面描述的辅助方法,可帮助您与这些HTTP响应属性进行交互。默认响应对象将返回带有text / html内容类型的200 OK HTTP响应。

2. Status

返回给客户端的HTTP响应将具有指示响应类型的状态代码(例如200 OK,400 Bad Request或500 Server Error)。您可以使用Slim应用程序的响应对象来设置HTTP响应的状态,如下所示:

<?php

$app->response->setStatus(400);

如果要返回不具有200 OK状态的HTTP响应,则只需设置响应对象的状态。您可以通过调用不带参数的相同方法轻松获取响应对象的当前HTTP状态,如下所示:

<?php

$status = $app->response->getStatus();

3.Headers

返回到HTTP客户端的HTTP响应将具有标头。HTTP标头是提供有关HTTP响应的元数据的键和值的列表。您可以使用Slim应用程序的响应对象来设置HTTP响应的标头。响应对象有一个公共属性headers,它是一个实例\Slim\Helper\Set; 这提供了一个简单的标准化接口来操作HTTP响应头。

<?php

$app = new \Slim\Slim();

$app->response->headers->set(‘Content-Type’, ‘application/json’);

您也可以从响应对象的headers属性中获取标头:

<?php

$contentType = $app->response->headers->get(‘Content-Type’);

如果不存在具有给定名称的标头,null则返回。您可以使用破折号或下划线指定带有大写,小写或混合大小写的标题名称。使用您最舒适的命名约定。

4. Body

返回给客户端的HTTP响应将具有正文。HTTP正文是传递给客户端的HTTP响应的实际内容。您可以使用Slim应用程序的响应对象来设置HTTP响应的正文:

<?php

$app = new \Slim\Slim();

// Overwrite response body

$app->response->setBody(‘Foo’);

// Append response body

$app->response->write(‘Bar’);

当您覆盖或附加响应对象的主体时,响应对象将根据新响应主体的bytesize 自动设置 Content-Length标头。

您可以像这样获取响应对象的主体:

<?php

$body = $app->response->getBody();

通常,您永远不需要使用setBody()或write()方法手动设置响应主体; 相反,Slim应用程序将为您执行此操作。每当您echo()在路由的回调函数 echo()内容时,都会在输出缓冲区中捕获’d内容,并在将HTTP响应返回给客户端之前附加到响应正文。

5.Cookies

Slim应用程序提供了帮助方法来发送带有HTTP响应的cookie。

1)设置Cookie

此示例演示如何使用Slim应用程序的setCookie()方法创建要与HTTP响应一起发送的HTTP cookie:

<?php

$app->setCookie(‘foo’, ‘bar’, ‘2 days’);

这将创建一个名为“foo”且值为“bar”的HTTP cookie,该cookie将在两天后到期。您还可以提供其他cookie属性,包括其路径,域,安全和httponly设置。Slim应用程序的 setCookie()方法使用与PHP的本机setCookie()函数相同的签名。

<?php

$app->setCookie(

$name,

$value,

$expiresAt,

$path,

$domain,

$secure,

$httponly

);

2)设置加密Cookie

您可以通过将应用程序的cookies.encrypt设置设置为,告诉Slim加密响应cookie true。当此设置true为时,Slim将在响应cookie返回到HTTP客户端之前自动对其进行加密。

以下是用于cookie加密的可用Slim应用程序设置:

<?php

$app = new \Slim\Slim(array(

‘cookies.encrypt’ => true,

‘cookies.secret_key’ => ‘my_secret_key’,

‘cookies.cipher’ => MCRYPT_RIJNDAEL_256,

‘cookies.cipher_mode’ => MCRYPT_MODE_CBC

));

3)删除Cookie

您可以使用Slim应用程序的deleteCookie()方法删除cookie 。这将在下一个HTTP请求之前从HTTP客户端删除cookie。这个方法接受相同的签名斯利姆应用程序的 setCookie()实例方法,而不该$expires说法。只需要第一个参数。

<?php

$app->deleteCookie(‘foo’);

如果您还需要指定路径和域:

<?php

$app->deleteCookie(‘foo’, ‘/’, ‘foo.com’);

您还可以进一步指定secure和httponly属性:

<?php

$app->deleteCookie(‘foo’, ‘/’, ‘foo.com’, true, true);

6.Helpers

响应对象提供了帮助方法来检查底层HTTP响应并与之交互。

Finalize

响应对象的finalize()方法返回一个数值数组[status, header, body]。状态是整数; 标头是可迭代的数据结构; 身体是一根绳子。如果要\Slim\Http\Response在Slim应用程序或其中间件中创建新对象,可以调用响应对象的 finalize()方法来生成基础HTTP响应的状态,标头和正文。

<?php

/**

* Prepare new response object

*/

$res = new \Slim\Http\Response();

$res->setStatus(400);

$res->write(‘You made a bad request’);

$res->headers->set(‘Content-Type’, ‘text/plain’);

/**

* Finalize

* @return [

* 200,

* [‘Content-type’ => ‘text/plain’],

* ‘You made a bad request’

* ]

*/

$array = $res->finalize();

Redirect重定向

响应对象的redirect()方法将设置响应状态及其返回3xx重定向响应所需的Location:头。

<?php

$app->response->redirect(‘/foo’, 303);

Status Introspection

响应对象提供其他帮助方法来检查其当前状态。以下所有方法都返回一个布尔值:

<?php

$res = $app->response;

//Is this an informational response?

$res->isInformational();

//Is this a 200 OK response?

$res->isOk();

//Is this a 2xx successful response?

$res->isSuccessful();

//Is this a 3xx redirection response?

$res->isRedirection();

//Is this a specific redirect response? (301, 302, 303, 307)

$res->isRedirect();

//Is this a forbidden response?

$res->isForbidden();

//Is this a not found response?

$res->isNotFound();

//Is this a client error response?

$res->isClientError();

//Is this a server error response?

$res->isServerError();

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/53433.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信