前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hyperf 初体验-视图

Hyperf 初体验-视图

作者头像
hedeqiang
发布2019-12-18 11:30:32
1.4K0
发布2019-12-18 11:30:32
举报
文章被收录于专栏:LaravelCodeLaravelCode

今天走一遍 Hyperf 框架的视图,

先读一遍 文档,大致需要安装 3 处依赖

安装视图

代码语言:javascript
复制
composer require hyperf/view
配置

新建 config/autoload/view.php 配置文件

代码语言:javascript
复制
<?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/',
    ],
];

根据文档 在根目录新建 /storage/view/runtime/view 文件夹

使用 Task 模式时,需引入 hyperf/task 组件且必须配置 task_enable_coroutinefalse,否则会出现协程数据混淆的问题,更多请查阅 Task 组件文档。 若使用 Sync 模式渲染视图时,请确保相关引擎是协程安全的,否则会出现数据混淆的问题,建议使用更加数据安全的 Task 模式。

安装 Task

代码语言:javascript
复制
composer require hyperf/task
配置

server.php 增加 Task 相关的配置。

代码语言:javascript
复制
<?php

declare(strict_types=1);

use Hyperf\Server\SwooleEvent;

return [
    // 这里省略了其它不相关的配置项
    'settings' => [
        // Task Worker 数量,根据您的服务器配置而配置适当的数量
        'task_worker_num' => 8,
        // 因为 `Task` 主要处理无法协程化的方法,所以这里推荐设为 `false`,避免协程下出现数据混淆的情况
        'task_enable_coroutine' => false,
    ],
    'callbacks' => [
        // Task callbacks
        SwooleEvent::ON_TASK => [Hyperf\Framework\Bootstrap\TaskCallback::class, 'onTask'],
        SwooleEvent::ON_FINISH => [Hyperf\Framework\Bootstrap\FinishCallback::class, 'onFinish'],
    ],
];

配置静态资源

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

代码语言:javascript
复制
return [
    'settings' => [
        ...
        // 静态资源
        'document_root' => BASE_PATH . '/public',
        'static_handler_locations' => ['/'],
        'enable_static_handler' => true,
    ],
];

必须在根目录新建 public 文件夹,否则会出现 xxxx/public does not exist

以下是配置文件 server.php 的完整内容

代码语言:javascript
复制
<?php

declare(strict_types=1);
/**
 * This file is part of Hyperf.
 *
 * @link     https://www.hyperf.io
 * @document https://doc.hyperf.io
 * @contact  group@hyperf.io
 * @license  https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE
 */

use Hyperf\Server\Server;
use Hyperf\Server\SwooleEvent;

return [
    'mode' => SWOOLE_PROCESS,
    'servers' => [
        [
            'name' => 'http',
            'type' => Server::SERVER_HTTP,
            'host' => '0.0.0.0',
            'port' => 9501,
            'sock_type' => SWOOLE_SOCK_TCP,
            'callbacks' => [
                SwooleEvent::ON_REQUEST => [Hyperf\HttpServer\Server::class, 'onRequest'],
            ],
        ],
    ],
    'settings' => [
        'enable_coroutine' => true,
        'worker_num' => swoole_cpu_num(),
        'pid_file' => BASE_PATH . '/runtime/hyperf.pid',
        'open_tcp_nodelay' => true,
        'max_coroutine' => 100000,
        'open_http2_protocol' => true,
        'max_request' => 100000,
        'socket_buffer_size' => 2 * 1024 * 1024,

        // Task Worker 数量,根据您的服务器配置而配置适当的数量
        'task_worker_num' => 8,
        // 因为 `Task` 主要处理无法协程化的方法,所以这里推荐设为 `false`,避免协程下出现数据混淆的情况
        'task_enable_coroutine' => false,

         // 静态资源
        'document_root' => BASE_PATH . '/public',
        'static_handler_locations' => ['/'],
        'enable_static_handler' => true,
    ],
    'callbacks' => [
        SwooleEvent::ON_BEFORE_START => [Hyperf\Framework\Bootstrap\ServerStartCallback::class, 'beforeStart'],
        SwooleEvent::ON_WORKER_START => [Hyperf\Framework\Bootstrap\WorkerStartCallback::class, 'onWorkerStart'],
        SwooleEvent::ON_PIPE_MESSAGE => [Hyperf\Framework\Bootstrap\PipeMessageCallback::class, 'onPipeMessage'],
        // Task callbacks
        SwooleEvent::ON_TASK => [Hyperf\Framework\Bootstrap\TaskCallback::class, 'onTask'],
        SwooleEvent::ON_FINISH => [Hyperf\Framework\Bootstrap\FinishCallback::class, 'onFinish'],
    ],
];

安装视图渲染引擎

blade 为例

代码语言:javascript
复制
composer require duncan3dc/blade

使用

storage\view 中新建 index.blade.php 文件

代码语言:javascript
复制
<!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>

IndexController 为例 ,实例化 RenderInterface 调用 render 即可

代码语言:javascript
复制
<?php

declare(strict_types=1);
/**
 * This file is part of Hyperf.
 *
 * @link     https://www.hyperf.io
 * @document https://doc.hyperf.io
 * @contact  group@hyperf.io
 * @license  https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE
 */

namespace App\Controller;

use Hyperf\View\RenderInterface;

class IndexController extends Controller
{
    public function index(RenderInterface $render)
    {
        return $render->render('index', ['name' => 'Hyperf']);
    }
}

重启服务、应该就可以访问到视图页面了

上面说到 由 Hyperf 接管静态路由,那么在视图中该怎样访问呢? 比如 public/css/app.css 该怎样引入呢?

代码语言:javascript
复制
<link rel="stylesheet" href="/css/app.css">

直接 / 即可

建议通读一遍文档、按文档一步一步来,就可以、否则你会遇到一对错误。比如 task 问题、public 文件不存在等等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装视图
    • 配置
    • 安装 Task
      • 配置
      • 配置静态资源
      • 安装视图渲染引擎
      • 使用
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档