承接 decodelabs/horizon 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

decodelabs/horizon

最新稳定版本:v0.5.2

Composer 安装命令:

composer require decodelabs/horizon

包简介

Simple HTML view containers

README 文档

README

PHP from Packagist Latest Version Total Downloads GitHub Workflow Status PHPStan License

Simple HTML view containers

Horizon provides a simple structure for building and rendering HTML views using the DecodeLabs\Tagged interfaces.

Installation

This package requires PHP 8.4 or higher.

Install via Composer:

composer require decodelabs/horizon

Usage

Programmatically build and render HTML views using the Page class:

use DecodeLabs\Horizon\Page;
use DecodeLabs\Tagged as Html;

$page = new Page(function($page) {
    $page->title = 'Hello, World!';
    $page->setMeta('description', 'This is a test page');

    $page->addLink(
        key: 'styles',
        rel: 'stylesheet',
        href: '/styles.css'
    );

    $page->addLink(
        key: 'favicon',
        rel: 'icon',
        href: '/favicon.ico'
    );

    $page->addBodyScript(
        key: 'bundle',
        src: '/bundle-45346534.js'
    );

    $page->bodyTag->addClass('section-home');

    yield Html::{'h1'}('Hello, World!');
    yield Html::{'p'}('This is a test page');
});

Decorators

Horizon provides a simple decorator system for adding additional functionality to your pages. Decorators must be findable by Archetype - either in DecodeLabs\Horizon\Decorator or in a namespace registered in the Archetype namespace map.

namespace DecodeLabs\Horizon\Decorator;

use DecodeLabs\Horizon\Decorator;
use DecodeLabs\Horizon\Page;

class MyDecorator implements Decorator
{
    public function decorate(
        Page $page, // Require parameter
        string $basePath // Decorator-specific parameter
    ): void {
        $page->title = 'My Decorated Page';

        $page->addBodyScript(
            key: 'analytics',
            src: $basePath.'/analytics.js'
        );
    }
}

$page = new Page(function($page) {
    yield Html::{'h1'}('Hello, World!');
    yield Html::{'p'}('This is a test page');
});

$page->decorate('MyDecorator', '/base/path');

Harvest Transformer

Horizon includes a Harvest transformer that can be used to convert a Page instance into a PSR-7 HTTP Response during the Harvest request lifecycle.

Harvest Transformers should be managed by the HTTP Middleware that needs to transform Responses, for example Greenleaf will transparently call transform() for the return value of a Greenleaf Action.

The result is that you can return a Page instance from a Greenleaf Action and it will be automatically transformed into a PSR-7 Response.

use DecodeLabs\Greenleaf\Action;
use DecodeLabs\Greenleaf\Action\ByMethodTrait;
use DecodeLabs\Horizon\Harvest;

class MyAction implements Action
{
    use ByMethodTrait;

    public function get(): Page
    {
        return new Page(function() {
            yield 'My content';
        });
    }
}

Licensing

Horizon is licensed under the MIT License. See LICENSE for the full license text.

统计信息

  • 总下载量: 590
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 2
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 2
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-03-14