Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Twig Template Engine Laravel Package

memio/twig-template-engine

Twig template engine integration for Memio: render Memio documents using Twig, enabling customizable code generation and templated output. Provides a bridge between Memio’s model-driven generators and Twig’s flexible templating system.

View on GitHub
Deep Wiki
Context7

Memio's TwigTemplateEngine

Memio is a highly opinionated PHP code generator library. It is composed of small independent packages, one being PrettyPrinter: the actual code generator.

PrettyPrinter relies on an interface, TemplateEngine, but doesn't provide any implementation to avoid direct coupling to any templating libraries.

This package, TwigTemplateEngine, provides an implementation and templates for Twig.

Note: This package is part of Memio. Have a look at the main repository.

Installation

Install it using Composer:

composer require memio/twig-template-engine:^3.0

Example

We're going to generate a class with a constructor and two attributes:

<?php

require __DIR__.'/vendor/autoload.php';

use Memio\Model\File;
use Memio\Model\Objekt;
use Memio\Model\Property;
use Memio\Model\Method;
use Memio\Model\Argument;

// Initialize the code generator
$loader = new \Twig\Loader\FilesystemLoader(__DIR__.'/templates');
$twig = new \Twig\Environment($loader);

$line = new Memio\TwigTemplateEngine\TwigExtension\Line\Line();
$line->add(new Memio\TwigTemplateEngine\TwigExtension\Line\ContractLineStrategy());
$line->add(new Memio\TwigTemplateEngine\TwigExtension\Line\FileLineStrategy());
$line->add(new Memio\TwigTemplateEngine\TwigExtension\Line\MethodPhpdocLineStrategy());
$line->add(new Memio\TwigTemplateEngine\TwigExtension\Line\ObjectLineStrategy());
$line->add(new Memio\TwigTemplateEngine\TwigExtension\Line\StructurePhpdocLineStrategy());

$twig->addExtension(new Memio\TwigTemplateEngine\TwigExtension\Type());
$twig->addExtension(new Memio\TwigTemplateEngine\TwigExtension\Whitespace($line));

$templateEngine = new Memio\TwigTemplateEngine\TwigTemplateEngine($twig);
$prettyPrinter = new Memio\PrettyPrinter\PrettyPrinter($templateEngine);

// Describe the code you want to generate using "Models"
$myService = (new File('src/Vendor/Project/MyService.php'))
    ->setStructure(
        (new Objekt('Vendor\Project\MyService'))
            ->addProperty(new Property('createdAt'))
            ->addProperty(new Property('filename'))
            ->addMethod(
                (new Method('__construct'))
                    ->addArgument(new Argument('DateTime', 'createdAt'))
                    ->addArgument(new Argument('string', 'filename'))
            )
    )
;

// Generate the code and display in the console
echo $prettyPrinter->generateCode($myService);

// Or display it in a browser
// echo '<pre>'.htmlspecialchars($prettyPrinter->generateCode($myService)).'</pre>';

With this simple example, we get the following output:

<?php

namespace Vendor\Project;

class MyService
{
    private $createdAt;
    private $filename;

    public function __construct(DateTime $createdAt, string $filename)
    {
    }
}

Have a look at the main respository to discover the full power of Memio.

Want to know more?

Memio uses phpspec, which means the tests also provide the documentation. Not convinced? Then clone this repository and run the following commands:

make lib-init                        # Set up Docker environment
make phpspec arg='--format pretty'   # Run the specifications

Note: Run make or make help to see all available commands.

You can see the current and past versions using one of the following:

And finally some meta documentation:

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
milito/query-filter
apiboxsym/user-bundle
apiboxsym/health-check-bundle
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours