Add support for the Latte templating engine in Laravel views.
- Render
.latte
views - Latte engine configurable via facade
- Translation provider to access localized messages
- Laravel-style path resolution when including partials
- Extensive test coverage
composer require daun/laravel-latte
- PHP 8.1+
- Laravel 9/10/11
Installing the composer package will automatically register a Service Provider with your Laravel app.
You can now render Latte files like you would any other view. The example below will render the
view at resources/views/home.latte
using Latte.
Route::get('/', function() {
return view('home');
});
The package will read its configuration from config/latte.php
. Use Artisan to publish and
customize the default config file:
php artisan vendor:publish --provider="Daun\LaravelLatte\ServiceProvider"
The package includes a custom translator extension that acts as a bridge to Laravel's translation
service. It allows using any translations registered in your app to be used in Latte views, using
either the _
tag or the translate
filter:
{_'messages.welcome'}
{('messages.welcome'|translate)}
You can pass in parameters as usual:
{_'messages.welcome', [name: 'Adam']}
{('messages.welcome'|translate:[name: 'Adam'])}
Translate using a custom locale by passing it after or in place of the params:
{_'messages.welcome', [name: 'Mary'], 'fr'}
{_'messages.welcome', 'fr'}
Pluralization works using the transChoice
filter.
{('messages.apples'|transChoice:5)}
The package includes a custom loader that allows including partials from subdirectories using Laravel's dot notation to specify folders.
{* resolves to /resources/views/partials/slideshow/image.latte *}
{include 'partials.slideshow.image'}
To specifically include files relative to the current file, prefix the path with ./
or ../
:
{include './image.latte'}
If you require a common layout file for all views, you can define a default layout in
config/latte.php
. Any views without a specifically set layout will now be merged into that layout.
[
// /resources/views/layouts/default.latte
'default_layout' => 'layouts.default'
]
To extend Latte and add your own tags, filters and functions, you can use the extensions
array
in config/latte.php
to supply a list of Latte extensions to register automatically.
[
'extensions' => [
\App\View\Latte\MyExtension::class
]
]
You can also directly access and configure the Latte engine instance from the Latte
facade.
Modify its config, add custom filters, etc.
use Daun\LaravelLatte\Facades\Latte;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Latte::addFilter('plural', fn($str) => Str::plural($str));
}
}
If you need to be notified when the Latte engine is created, listen for the LatteEngineCreated
event to receive and customize the returned engine instance.
use Daun\LaravelLatte\Events\LatteEngineCreated;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
Event::listen(function (LatteEngineCreated $event) {
$event->engine->setAutoRefresh(true);
});
}
}