qiq / helper-sapien
为 Sapien 请求和响应对象提供 Qiq 辅助函数。
Requires
- php: ^8.1
- qiq/qiq: ^2.0
- sapien/sapien: ^1.0
Requires (Dev)
- pds/composer-script-names: ^1.0
- pds/skeleton: ^1.0
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^10.0
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 输出替换。