5.6 KiB
檢視
檢視元件由 hyperf/view 實現並提供使用,滿足您對檢視渲染的需求,元件預設支援 Blade
、 Smarty
、 Twig
、 Plates
和 ThinkTemplate
五種模板引擎。
安裝
composer require hyperf/view
配置
View 元件的配置檔案位於 config/autoload/view.php
,若配置檔案不存在可執行如下命令生成配置檔案
php bin/hyperf.php vendor:publish hyperf/view
以下為相關配置的說明:
配置 | 型別 | 預設值 | 備註 |
---|---|---|---|
engine | string | Hyperf\View\Engine\BladeEngine::class | 檢視渲染引擎 |
mode | string | Mode::TASK | 檢視渲染模式 |
config.view_path | string | 無 | 檢視檔案預設地址 |
config.cache_path | string | 無 | 檢視檔案快取地址 |
配置檔案格式示例:
<?php
declare(strict_types=1);
use Hyperf\View\Mode;
use Hyperf\View\Engine\BladeEngine;
return [
// 使用的渲染引擎
'engine' => BladeEngine::class,
// 不填寫則預設為 Task 模式,推薦使用 Task 模式
'mode' => Mode::TASK,
'config' => [
// 若下列資料夾不存在請自行建立
'view_path' => BASE_PATH . '/storage/view/',
'cache_path' => BASE_PATH . '/runtime/view/',
],
];
Task 模式
使用 Task
模式時,需引入 hyperf/task 元件且必須配置 task_enable_coroutine
為 false
,否則會出現協程資料混淆的問題,更多請查閱 Task 元件文件。
另外,在 Task
模式下,檢視渲染工作是在 Task Worker
程序中完成的,而請求處理即 Controller 是在 Worker
程序完成的,兩部分的工作由不同的程序完成,所以像 Request
,Session
等在 Worker
程序透過上下文管理的物件或資料在檢視頁面上是無法直接使用的,這時候就需要您在 Controller 先處理好資料或判斷結果,然後再呼叫 render
時傳遞資料到檢視進行資料的渲染。
Sync 模式
若使用 Sync
模式渲染檢視時,請確保相關引擎是協程安全的,否則會出現資料混淆的問題,建議使用更加資料安全的 Task
模式。
配置靜態資源
如果您希望 Swoole
來管理靜態資源,請在 config/autoload/server.php
配置中增加以下配置。
return [
'settings' => [
...
// 靜態資源
'document_root' => BASE_PATH . '/public',
'enable_static_handler' => true,
],
];
檢視渲染引擎
官方目前支援 Blade
、 Smarty
、 Twig
、 Plates
和 ThinkTemplate
五種模板,預設安裝 hyperf/view 時不會自動安裝任何模板引擎,需要您根據自身需求,自行安裝對應的模板引擎,使用前必須安裝任一模板引擎。
安裝 Blade 引擎
composer require hyperf/view-engine
詳細方式見文件 檢視引擎
或者使用
duncan3dc/blade 因為使用了 Laravel 的 Support 庫,所以會導致某些函式不相容,暫時不推薦使用
composer require duncan3dc/blade
安裝 Smarty 引擎
composer require smarty/smarty
安裝 Twig 引擎
composer require twig/twig
安裝 Plates 引擎
composer require league/plates
安裝 ThinkTemplate 引擎
composer require sy-records/think-template
接入其他模板
假設我們想要接入一個虛擬的模板引擎名為 TemplateEngine
,那麼我們需要在任意地方建立對應的 TemplateEngine
類,並實現 Hyperf\View\Engine\EngineInterface
介面。
<?php
declare(strict_types=1);
namespace App\Engine;
use Hyperf\View\Engine\EngineInterface;
class TemplateEngine implements EngineInterface
{
public function render($template, $data, $config): string
{
// 例項化對應的模板引擎的例項
$engine = new TemplateInstance();
// 並呼叫對應的渲染方法
return $engine->render($template, $data);
}
}
然後修改檢視元件的配置:
<?php
use App\Engine\TemplateEngine;
return [
// 將 engine 引數改為您的自定義模板引擎類
'engine' => TemplateEngine::class,
'mode' => Mode::TASK,
'config' => [
'view_path' => BASE_PATH . '/storage/view/',
'cache_path' => BASE_PATH . '/runtime/view/',
],
];
使用
以下以 BladeEngine
為例,首先在對應的目錄裡建立檢視檔案 index.blade.php
。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hyperf</title>
</head>
<body>
Hello, {{ $name }}. You are using blade template now.
</body>
</html>
控制器中獲取 Hyperf\View\Render
例項,然後呼叫 render
方法並傳遞檢視檔案地址 index
和 渲染資料
即可,檔案地址忽略檢視檔案的字尾名。
<?php
declare(strict_types=1);
namespace App\Controller;
use Hyperf\HttpServer\Annotation\AutoController;
use Hyperf\View\RenderInterface;
#[AutoController]
class ViewController
{
public function index(RenderInterface $render)
{
return $render->render('index', ['name' => 'Hyperf']);
}
}
訪問對應的 URL,即可獲得如下所示的檢視頁面:
Hello, Hyperf. You are using blade template now.