hyperf/doc/zh/view.md
2019-07-27 13:52:40 +08:00

3.0 KiB
Raw Blame History

视图

安装

composer require 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 模式
    'mode' => Mode::TASK,
    'config' => [
        // 若不存在请自行创建
        'view_path' => BASE_PATH . '/storage/view/',
        'cache_path' => BASE_PATH . '/runtime/view/',
    ],
];

使用 Task 模式时,需引入 hyperf/task 组件且必须配置 task_enable_coroutinefalse,否则会出现协程数据混淆的问题,更多请查阅 Task 组件文档。

使用

以下以 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 示例,然后返回渲染数据即可。

<?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.

视图渲染引擎

官方暂时支持 Blade 和 Smarty 两种模板。

Blade模板

composer require duncan3dc/blade

Smarty模板

composer require smarty/smarty

接入其他模板

创建对应的 TemplateEngine,并实现 Hyperf\View\Engine\EngineInterface 接口。

<?php

declare(strict_types=1);

namespace App\Engine;

use duncan3dc\Laravel\BladeInstance;

class TemplateEngine implements EngineInterface
{
    public function render($template, $data, $config): string
    {
        $blade = new BladeInstance($config['view_path'], $config['cache_path']);

        return $blade->render($template, $data);
    }
}

然后修改配置

<?php

use App\Engine\TemplateEngine;

return [
    'engine' => TemplateEngine::class,
    'mode' => Mode::TASK,
    'config' => [
        'view_path' => BASE_PATH . '/storage/view/',
        'cache_path' => BASE_PATH . '/runtime/view/',
    ],
];