lee-to / yii-blade
Blade template engine support
Fund package maintenance!
0.3.0
2026-05-23 15:35 UTC
Requires
- php: ^8.2
- illuminate/view: ^12
- yiisoft/definitions: ^3.4
- yiisoft/view: ^12.2
Requires (Dev)
- phpunit/phpunit: ^11.5
README
This package provides Laravel Blade template engine support for the Yii3 framework.
Requirements
- PHP 8.2+
- Yii3
- Composer 2.5+
Installation
composer require lee-to/yii-blade
Or install via local path repository:
"repositories": [ { "type": "path", "url": "packages/yii-blade", "options": { "versions": { "lee-to/yii-blade": "1.x-dev" }, "symlink": true } } ]
Configuration
Configure the package in your config/params.php:
return [ 'lee-to/yii-blade' => [ 'paths' => [ 'default' => '@views', 'admin' => '@views/admin', ], 'cachePath' => 'runtime/cache/blade/views', 'componentNamespaces' => [ 'App\\View\\Components' => 'x', ], 'anonymousComponentNamespaces' => [ '@views/components' => 'x', ], 'directives' => [ // App\Blade\Directives\MyDirective::class, ], ], ];
Usage
Create a Blade template in your views directory:
{{-- views/hello.blade.php --}} <h1>Hello, {{ $name }}!</h1> @if($showGreeting) <p>Welcome to Yii3 with Blade!</p> @endif
The package automatically registers as a renderer for .blade.php files.
Layout
Create a layout template:
{{-- views/layouts/main.blade.php --}} <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>@yield('title', 'My application')</title> </head> <body> <header> <nav> <a href="/">Home</a> </nav> </header> <main> @yield('content') </main> </body> </html>
Use it from a page template:
{{-- views/site/index.blade.php --}} @extends('layouts.main') @section('title', 'Home') @section('content') <h1>Hello, {{ $name }}!</h1> @endsection
Custom Directives
Create a custom directive by implementing DirectiveInterface:
<?php namespace App\Blade\Directives; use Closure; use Leeto\YiiBlade\DirectiveInterface; use Leeto\YiiBlade\DirectiveType; final class DateTimeDirective implements DirectiveInterface { public function getType(): DirectiveType { return DirectiveType::DEFAULT; } public function getName(): string { return 'datetime'; } public function handler(): Closure { return fn(?string $expression): string => "<?php echo date('Y-m-d H:i:s', $expression); ?>"; } }
Register it in params:
'directives' => [ App\Blade\Directives\DateTimeDirective::class, ],
Use in templates:
@datetime(time())
Directive Types
DirectiveType::DEFAULT- Standard directive (@name($expression))DirectiveType::IF- Conditional directive (@name($condition) ... @endname)DirectiveType::STRINGABLE- Stringable handler for custom object rendering
Features
- Full Blade syntax support
- Components and slots
- Custom directives
- Anonymous components
- Template inheritance (
@extends,@section,@yield) - Includes (
@include,@each) - Conditionals (
@if,@unless,@isset,@empty) - Loops (
@foreach,@for,@while,@forelse) - And more...
License
MIT