Standalone blade template engine (single file, no dependencies)
- PHP 5.4 or newer
Download the file from release page and drop to your project. That's it
Location: views/home/index.blade.php
@extends('shared.layout')
@section('looping-test')
<p>Let's print odd numbers under 50:</p>
<p>
@foreach($numbers as $number)
@if($number % 2 !== 0)
{{ $number }}
@endif
@endforeach
</p>
@endsection
Location: views/shared/layout.blade.php
@include('shared.header')
<body>
<div id="container">
<h3>Welcome to <span class="reddish">{{ $title }}</span></h3>
<p>{{ $content }}</p>
<p>@capitalize($mytext)</p>
@yield('looping-test')
</div>
@include('shared.footer')
</body>
</html>
Location: views/shared/header.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ $title }}</title>
<style type="text/css">
body{font-family:Arial,Helvetica,sans-serif;font-size:12px}a{text-decoration:none;color:#d73a49}#container{position:relative;top:100px;width:60%;margin:0 auto;border:1px solid #ccc;border-radius:3px}#container h3{margin:0;padding:10px;font-size:18px;border-bottom:1px solid #ccc;color:#666}span.reddish{color:#bc5858}#container code,#container p{margin:0;padding:10px;font-size:12px}#container code{margin:12px;padding:10px;display:block;background-color:#fafbfc;color:#333}#footer{position:relative;top:120px;width:60%;margin:0 auto;font-size:11px}#footer span.copyright{float:left}#footer span.version{float:right}
</style>
</head>
Location: views/shared/footer.blade.php
<div id="footer">
<span class="copyright">Written by <a href="{{ $link }}" target="_blank">@esyede</a></span>
<span class="version">Version {{ Blade::VERSION }}</span>
</div>
Location: index.php
<?php
include 'Blade.php';
use Esyede\Blade;
$blade = new Blade();
// View data
$title = 'blade test';
$link = 'https://github.com/esyede';
$content = 'This is your view content';
$mytext = 'And this should be capitalized';
$numbers = range(1, 50);
// Create custom directive
$blade->directive('capitalize', function ($text) {
return "<?php echo strtoupper($text) ?>";
});
$data = compact('title', 'link', 'content', 'mytext', 'numbers');
// render
$blade->render('home.index', $data);
Command | Description |
---|---|
{{ $var }} |
Echo. It's escaped by default, just like in Laravel |
{!! $var !!} |
Raw echo (no escaping) |
{{ $var or 'default' }} |
Echo content with a default value |
{{{ $var }}} |
Echo escaped content |
{{-- Comment --}} |
Comment |
Command | Description |
---|---|
@if(condition) @elseif(condition) @else @endif |
PHP if ( ) block |
@unless(condition) @endunless |
PHP if (! ) block |
@switch(cases) @case(case) @break @default @endswitch |
PHP switch ( ) block |
Command | Description |
---|---|
@foreach(key as value) @endforeach |
PHP foreach ( ) block |
@forelse(key as value) @empty @endforelse |
PHP foreach ( ) with empty block |
@for(i=0; i<10; i++) @endfor |
PHP for ( ) block |
@while(condition) @endwhile |
PHP while ( ) block |
Command | Description |
---|---|
@isset(condition) @endisset |
PHP if (isset( )) block |
@set(key, value) |
Set variable <?php $key = $value ?> |
@unset(var) |
PHP unset() |
@continue or @continue(condition) |
PHP continue; or if (true) continue; |
@break or @break(condition) |
PHP break; or if(true) break; |
@exit or @exit(condition) |
PHP exit; or if(true) exit; |
@json(data) |
PHP json_encode() |
@method('put') |
HTML hidden input for form method spoofing |
Command | Description |
---|---|
@include(file) |
Includes another view |
@extends(layout) |
Extends parent layout |
@section(name) @endsection |
Section |
@yield(section) |
Yield a section |
@stop |
Stop a section |
@show |
Stop section and yields the content |
@append |
Stop section and append it to existing section with the same name |
@overwrite |
Stop section, overwrite previous section with the same name |
Ofcourse in the future we need more functionalities as the built-in functionalities is indeed limited. So, there is two APIs provided to extend this library:
This method can be used to add custom command. As you see in above example,
we already use this API to define our new @capitalize()
command:
// Signature:
Blade::directive(string $name, Closure $callback)
// Usage example:
$blade->directive('capitalize', function ($value) {
return strtolower($value);
});
This is another API provided to add custom directive. In fact, this command is used define our
built-in @set()
command:
// Signature:
Blade::extend(Closure $compiler)
// Usage example:
$blade->extend(function ($value) {
return preg_replace("/@set\(['\"](.*?)['\"]\,(.*)\)/", '<?php $$1 =$2; ?>', $value);
});
That's pretty much it. Thank you for stopping by!
This library is licensed under the MIT License