视图

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

    配置文件格式示例:

    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. // 若下列文件夹不存在请自行创建
    11. 'view_path' => BASE_PATH . '/storage/view/',
    12. 'cache_path' => BASE_PATH . '/runtime/view/',
    13. ],
    14. ];

    如果您希望 来管理静态资源,请在 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 时不会自动安装任何模板引擎,需要您根据自身需求,自行安装对应的模板引擎,使用前必须安装任一模板引擎。

    1. composer require smarty/smarty

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

    1. <?php
    2. declare(strict_types=1);
    3. class TemplateEngine implements EngineInterface
    4. {
    5. {
    6. // 实例化对应的模板引擎的实例
    7. $engine = new TemplateInstance();
    8. // 并调用对应的渲染方法
    9. return $engine->render($template, $data);
    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. </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,即可获得如下所示的视图页面: