视图

视图组件由 hyperf/view 实现并提供使用,满足您对视图渲染的需求,组件默认支持 BladeSmarty 两种模板引擎。

安装

  1. composer require hyperf/view

配置

View 组件的配置文件位于 config/autoload/view.php,若配置文件不存在可自行创建,以下为相关配置的说明:

配置 类型 默认值 备注
engine string Hyperf\View\Engine\BladeEngine::class 视图渲染引擎
mode string Mode::TASK 视图渲染模式
config.view_path string 视图文件默认地址
config.cache_path string 视图文件缓存地址

配置文件格式示例:

  1. <?php
  2. declare(strict_types=1);
  3. use Hyperf\View\Mode;
  4. use Hyperf\View\Engine\BladeEngine;
  5. return [
  6. // 使用的渲染引擎
  7. 'engine' => BladeEngine::class,
  8. // 不填写则默认为 Task 模式,推荐使用 Task 模式
  9. 'mode' => Mode::TASK,
  10. 'config' => [
  11. // 若下列文件夹不存在请自行创建
  12. 'view_path' => BASE_PATH . '/storage/view/',
  13. 'cache_path' => BASE_PATH . '/runtime/view/',
  14. ],
  15. ];

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

若使用 Sync 模式渲染视图时,请确保相关引擎是协程安全的,否则会出现数据混淆的问题,建议使用更加数据安全的 Task 模式。

配置静态资源

如果您希望 Swoole 来管理静态资源,请在 config/autoload/server.php 配置中增加以下配置。

  1. return [
  2. 'settings' => [
  3. ...
  4. // 静态资源
  5. 'document_root' => BASE_PATH . '/public',
  6. 'static_handler_locations' => ['/'],
  7. 'enable_static_handler' => true,
  8. ],
  9. ];

视图渲染引擎

官方目前支持 BladeSmarty 两种模板,默认安装 hyperf/view 时不会自动安装任何模板引擎,需要您根据自身需求,自行安装对应的模板引擎,使用前必须安装任一模板引擎。

安装 Blade 引擎

  1. composer require duncan3dc/blade

安装 Smarty 引擎

  1. composer require smarty/smarty

接入其他模板

假设我们想要接入一个虚拟的模板引擎名为 TemplateEngine,那么我们需要在任意地方创建对应的 TemplateEngine 类,并实现 Hyperf\View\Engine\EngineInterface 接口。

  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Engine;
  4. class TemplateEngine implements EngineInterface
  5. {
  6. public function render($template, $data, $config): string
  7. {
  8. // 实例化对应的模板引擎的实例
  9. $engine = new TemplateInstance();
  10. // 并调用对应的渲染方法
  11. return $engine->render($template, $data);
  12. }
  13. }

然后修改视图组件的配置:

  1. <?php
  2. use App\Engine\TemplateEngine;
  3. return [
  4. // 将 engine 参数改为您的自定义模板引擎类
  5. 'engine' => TemplateEngine::class,
  6. 'mode' => Mode::TASK,
  7. 'config' => [
  8. 'view_path' => BASE_PATH . '/storage/view/',
  9. 'cache_path' => BASE_PATH . '/runtime/view/',
  10. ],
  11. ];

使用

以下以 BladeEngine 为例,首先在对应的目录里创建视图文件 index.blade.php

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Hyperf</title>
  6. </head>
  7. <body>
  8. Hello, {{ $name }}. You are using blade template now.
  9. </body>
  10. </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.