The Wayback Machine - https://web.archive.org/web/20221130141210/https://github.com/esyede/single-blade
Skip to content

esyede/single-blade

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

single-blade

Standalone blade template engine (single file, no dependencies)

Requirements

  • PHP 5.4 or newer

Installation

Download the file from release page and drop to your project. That's it

Usage

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);

Features

Echoes

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

Conditionals

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

Loopings

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

Additional commands

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

Layout and sections

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

Extending the class

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:

directive()

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);
});

extend()

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!

License

This library is licensed under the MIT License