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.
Installation
composer require memio/twig-template-engine
Register the service provider in config/app.php:
'providers' => [
Memio\TwigTemplateEngine\TwigTemplateEngineServiceProvider::class,
],
Basic Usage
Define a Twig template in resources/views/emails/welcome.twig:
<h1>Hello, {{ name }}!</h1>
Render it in a Laravel controller:
use Memio\TwigTemplateEngine\Facades\Twig;
$content = Twig::render('emails.welcome', ['name' => 'John']);
First Use Case Replace Blade templates for dynamic email generation:
$email = new \Illuminate\Mail\Message;
$email->subject('Welcome!');
$email->markdown('emails.welcome', ['name' => $user->name]); // Replace with Twig
$email->twig('emails.welcome', ['name' => $user->name]); // New method
Template Inheritance Extend base layouts in Twig:
{% extends 'layouts.app.twig' %}
{% block content %}
<p>Custom content</p>
{% endblock %}
Dynamic Template Resolution Use Laravel’s view resolution with Twig:
$template = Twig::resolve('emails.' . $type . '.twig');
$content = Twig::render($template, $data);
Integration with Laravel Components Combine Twig with Livewire/Inertia:
<div x-data="{ open: false }">
{{ include('partials.modal.twig', { title: 'Alert' }) }}
</div>
Twig::setCacheDir(storage_path('framework/views'));
Twig::addExtension(new \Memio\TwigTemplateEngine\Extensions\CustomExtension());
Namespace Conflicts
Avoid naming Twig files identical to Blade files (e.g., welcome.blade.php vs. welcome.twig).
Fix: Use explicit extensions in config/view.php:
'paths' => [
resource_path('views'),
],
'extensions' => ['php', 'twig'], // Ensure Twig is last
Autoloading Issues If Twig templates aren’t found, verify:
views directory is in config/view.php.TwigTemplateEngineServiceProvider is registered.Performance Overhead Twig’s flexibility adds slight runtime cost. Profile with:
php artisan twig:cache:clear
Twig::setDebug(true); // In development only
storage/framework/views for errors.Custom Filters Register a Twig filter for Laravel-specific logic:
Twig::addFilter(new \Twig\TwigFilter('laravel_route', function ($name, $params = []) {
return route($name, $params);
}));
Override Default Loader For non-standard template paths:
Twig::setLoader(new \Twig\Loader\FilesystemLoader([
base_path('custom-templates'),
]));
Integrate with Laravel Mix Process Twig templates during asset compilation:
mix.twig(); // Hypothetical; check package docs for actual API
How can I help you explore Laravel packages today?