plumphp/plum-twig

PlumTwig is a Twig converter for Plum.

v0.1 2015-05-17 20:37 UTC

README

PlumTwig is a Twig converter for Plum. Plum is a data processing pipeline for PHP.

Latest Version Build Status Windows Build status Scrutinizer Code Quality Code Coverage StyleCI

Developed by Florian Eckerstorfer in Vienna, Europe.

Installation

You can install PlumTwig using Composer.

$ composer require plumphp/plum-twig

Usage

Please refer to the Plum documentation for more information about Plum in general.

TwigConverter

In its simplest form Plum\PlumTwig\TwigConverter takes an item and returns a rendered template. The given item is passed to Twigs render() method as context. The following code renders the hello.html.twig template and passes ["name" => "Florian"] as context to the template. The return value of convert() is the rendered template.

use Plum\PlumTwig\TwigConverter;

$converter = new TwigConverter($twig, 'hello');
$converter->convert(['name' => 'Florian']);

By default .html.twig is appended on the given template name. You can change the file extension by calling setFileExtension():

$converter->setFileExtension('.twig');

Sometimes different items should be rendered using different templates. If you pass a template property to the constructor, the template name retrieved from the given item. Because TwigConverter uses Vale to retrieve the value this works even if the item is a complex and nested structure.

$converter = new TwigConverter($twig, 'default', ['template' => 'layout']);

// The template name.html.twig is used to render the item
$converter->convert(['name' => 'Florian', 'layout' => 'name']);

We have seen that by default TwigConverter takes an arbitrary item (e.g., an array or object) and converts it into a string. In many cases the converter will be part of a bigger Plum workflow and you would like to keep the data in the item. You can pass a target property to the constructor and the rendered template will be stored in the item using Vale.

$converter = new TwigConverter($twig, 'layout', ['target' => 'content']);

// The rendered template is added to the item with the key "content"
$converter->convert(['name' => 'Florian']); // -> ['name' => 'Florian', 'content' => '...']

Not every time the full item should be passed as context, but rather an element of the item. You can pass the context property to tell TwigConverter which field in the item should be used as context.

$converter = new TwigConverter($twig, 'layout', ['context' => 'data']);

// Only the ['name' => 'Florian'] is passed as context to Twig
$converter->convert([['data' => ['name' => 'Florian'], 'file' => 'person']);

Whether the whole item or just part of it is used as context, Twig only allows arrays to be passed as context. Thus, TwigConverter checks if the context is an object and it will call its toArray() method (if it has one).

Change Log

Version 0.1 (17 May 2015)

  • Initial release

Author

Plum and PlumTwig have been developed by Florian Eckerstorfer (Twitter) in Vienna, Europe.

Plum is a project of Cocur. You can contact us on Twitter: @cocurco

License

The MIT license applies to plumphp/plum-twig. For the full copyright and license information, please view the LICENSE file distributed with this source code.