Skip to content

Rendering basics

To get started with rendering we recommend to use the RendererFactory instead of using both HtmlRenderer and TextRenderer.

php
use Flowframe\Brief\Components\Html;
use Flowframe\Brief\Renderers\HtmlRenderer;
use Flowframe\Brief\Renderers\TextRenderer;
use Flowframe\Brief\Renderers\RendererFactory;

$renderer = new RendererFactory(
    new HtmlRenderer,
    new TextRenderer,
);

$template = Html::make(
    // ...
);

$html = $renderer->toHtml($template);

$text = $renderer->toText($template);

Binding to a service container

Most popular frameworks come with a service container, here you can easily bind a concrete implementation to an interface. This keeps the configuration all in one place and avoids code duplication. Below is an example in Laravel:

php
use Flowframe\Brief\Renderers\HtmlRenderer;
use Flowframe\Brief\Renderers\TextRenderer;
use Flowframe\Brief\Renderers\RendererFactory;
use Flowframe\Brief\Renderers\Contracts\RendererFactoryInterface;

class AppServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->bind(RendererFactoryInterface::class, function () {
            return new RendererFactory(
                new HtmlRenderer,
                new TextRenderer,
            );
        });
    }
}

Now you can inject RendererFactoryInterface in constructors or methods and easily render templates. Below is an example of how you can use it:

php
class OrderShipped extends Mailable
{
    public function __construct(
        private Order $order,
        private ComponentInterface $template,
    ) {}

    public function content(RendererFactoryInterface $renderer): Content
    {
        return new Content(
            html: $renderer->toHtml($this->template),
            text: $renderer->toText($this->template),
        );
    }
}

Released under the MIT License.