qiq/helper-sapien

为 Sapien 请求和响应对象提供 Qiq 辅助函数。

2.0.0 2023-06-30 18:26 UTC

This package is auto-updated.

Last update: 2024-08-30 01:38:22 UTC


README

本软件包为 Qiq 提供了 Sapien 请求和响应对象的辅助函数。这些辅助函数允许您在 Qiq 模板 内部从 请求 中读取数据,并构建一个 响应

更多关于

安装

此软件包可以通过 Composer 以 qiq/helpers-sapien 的方式安装

composer require qiq/helpers-sapien ^1.0

请求辅助函数

注册

为了在您的 模板 中使用请求辅助函数,您需要将其注册到 Qiq 的 Helper 定位器 中。您可以通过半自动方式注册 ...

use Qiq\Helper\Sapien\Request;
use Qiq\Template;

/** @var Template $template */
Request::register('request', $template);

... 或者更手动地完成注册

use Qiq\Helper\Sapien\Request;
use Qiq\Template;

/** @var Template $template */
$template->getHelperLocator()->set('request', function () {
    return new Request();
});

默认情况下,辅助函数将构建一个属于它自己的新的内部 Sapien 请求 对象。如果您想传递一个现有的 请求 对象,您可以这样做

use Qiq\Helper\Sapien\Request;
use Qiq\Template;
use Sapien\Request as SapienRequest;

/** @var Template $template */
/** @var SapienRequest $sapienRequest */
Request::register('request', $template, $sapienRequest);

// or:
$template->getHelperLocator()->set('request', function () use ($sapienRequest) {
    return new Request($sapienRequest);
});

用法

一旦注册了辅助函数,您就可以使用注册的方法名来调用它。您可以使用 Qiq 语法 ...

{{ request()->... }}

... 或者 PHP 语法

<?php $this->request()->... ?>

请求辅助函数代理到其内部的 Sapien 请求 对象,使得所有 请求 属性都可用。

<p>The requested URL path is {{h request()->url->path }}</p>

要替换代理的 请求 对象,请使用 set() 方法

{{ request()->set(new \Sapien\Request()) }}

要直接获取代理的 请求 对象,请使用 get() 方法

<?php $request = $this->request()->get(); ?>

响应辅助函数

注册

为了在您的 模板 中使用响应辅助函数,您需要将其注册到 Qiq 的 Helper 定位器 中。您可以通过半自动方式注册 ...

use Qiq\Helper\Sapien\Response;
use Qiq\Template;

/** @var Template $template */
Response::register('response', $template);

... 或者更手动地完成注册

use Qiq\Helper\Sapien\Response;
use Qiq\Template;

/** @var Template $template */
$template->getHelperLocator()->set('response', function () {
    return new Response();
});

默认情况下,辅助函数将构建一个属于它自己的新的内部 Sapien 响应 对象。如果您想传递一个现有的 响应 对象,您可以这样做

use Qiq\Helper\Sapien\Response;
use Qiq\Template;
use Sapien\Response as SapienResponse;

/** @var Template $template */
/** @var SapienResponse $sapienResponse */
Response::register('response', $template, $sapienResponse);

// or:
$template->getHelperLocator()->set('response', function () use ($sapienResponse) {
    return new Response($sapienResponse);
});

用法

一旦注册了辅助函数,您就可以使用注册的方法名来调用它。您可以使用 Qiq 语法 ...

{{ response()->... }}

... 或者 PHP 语法

<?php $this->response()->... ?>

响应辅助函数代理到其内部的 Sapien 响应 对象,使得所有 响应 方法都可用。

{{ response()->setVersion(...) }}
{{ response()->setCode(...) }}
{{ response()->setHeader(...) }}
{{ response()->setCookie(...) }}

要替换代理的 响应 对象,请使用 set() 方法

{{ response()->set(new \Sapien\Response()) }}

要直接获取代理的 响应 对象,请使用 get() 方法

<?php $response = $this->response()->get(); ?>

渲染

在典型的 模板 使用中,调用 模板 的代码将渲染结果设置到 响应 的主体中 ...

/** @var \Qiq\Template $template */
$template->setData(...);
$template->setView(...);
$template->setLayout(...);
$content = $template();

/** @var \Sapien\Response $response */
$response->setContent($content);

... 以及设置 响应 的版本、状态、头信息和 cookies。

使用此辅助函数,您将调用辅助函数本身上的 render(),传递用于内容的 模板 对象,并返回一个 响应 对象。

/** @var \Qiq\Template $template */
$template->setData(...);
$template->setView(...);
$template->setLayout(...);

/** @var \Sapien\Response $response */
$response = $template->response()->render($template);

返回的 响应 将是模板内部构建的,包括在模板代码中设置的版本、状态、头信息和 cookies。

内容替换

当您调用 response()->render() 时,响应 的内容将是正常 模板 调用渲染的内容。

但是,您可以通过调用 response()->setContent(...) 并在模板代码内部直接设置内容来覆盖此行为。在以下示例中,响应 的内容将是 "Hello, world!"

Goodbye, content!
{{ response()->setContent("Hello, world!") }}

特殊响应

虽然您可以使用 response()->set(...) 替换内部 Response 并对替换的 Response 进行精细控制,但助手提供了两种方便的方法来用专业的 Sapien 响应替换 Response:一个用于 FileResponse,另一个用于 JsonResponse

要将 Response 转换为 FileResponse,请调用 response()->setFile()

{{ response()->setFile('path/to/file.php') }}

setFile() 方法模仿了位于 FileResponse 的同名方法。

要将 Response 转换为 JsonResponse,请调用 response()->setJson()。以下示例将所有当前的 Template 数据放入 JsonResponse

{{ response()->setJson($this->getData()) }}

setJson() 方法模仿了位于 JsonResponse 的同名方法。

请注意,这些方法将覆盖模板代码通常渲染的任何输出,分别用文件输出或 JSON 输出替换。