decodelabs / horizon
Simple HTML view containers
Requires
- php: ^8.4
- decodelabs/coercion: ^0.3.1
- decodelabs/exceptional: ^0.5.3
- decodelabs/tagged: ^0.18
Requires (Dev)
- decodelabs/genesis: ^0.11.2
- decodelabs/harvest: ^0.4.5
- decodelabs/phpstan-decodelabs: ^0.7.0
- decodelabs/zest: ^0.5.0
README
Simple HTML view containers
Horizon provides a simple structure for building and rendering HTML views using the DecodeLabs\Tagged
interfaces.
Get news and updates on the DecodeLabs blog.
Installation
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->setTitle('Hello, World!'); $page->addMeta('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'); });
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.