PHPackages                             joanrodas/plubo-template-engine - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Templating &amp; Views](/categories/templating)
4. /
5. joanrodas/plubo-template-engine

ActiveLibrary[Templating &amp; Views](/categories/templating)

joanrodas/plubo-template-engine
===============================

Blade Template Engine for WordPress based on BladeOne

01PHP

Since Jun 4Pushed 1y agoCompare

[ Source](https://github.com/joanrodas/plubo-template-engine)[ Packagist](https://packagist.org/packages/joanrodas/plubo-template-engine)[ RSS](/packages/joanrodas-plubo-template-engine/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

[![Logo](https://raw.githubusercontent.com/EFTEC/BladeOne/gh-pages/images/bladelogo.png)](https://raw.githubusercontent.com/EFTEC/BladeOne/gh-pages/images/bladelogo.png)

BladeOne Blade Template Engine
==============================

[](#bladeone-blade-template-engine)

BladeOne is a standalone version of Blade Template Engine that uses a single PHP file and can be ported and used in different projects. It allows you to use blade template outside Laravel.

[![Packagist](https://camo.githubusercontent.com/5a93f305668b940c52558fb8a61faded33fdc88905a7870c05b44dee06287740/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f65667465632f626c6164656f6e652e737667)](https://packagist.org/packages/eftec/bladeone)[![Total Downloads](https://camo.githubusercontent.com/a6af6284d7ef713687968bc7ab8e849ff269571724f9a5eff163942e75a47263/68747470733a2f2f706f7365722e707567782e6f72672f65667465632f626c6164656f6e652f646f776e6c6f616473)](https://packagist.org/packages/eftec/bladeone)![Maintenance](https://camo.githubusercontent.com/7d317c3b4c64125677a7546f7d5e14cb665071dfd46e373f49697ea8d564e396/68747470733a2f2f696d672e736869656c64732e696f2f6d61696e74656e616e63652f7965732f323032342e737667)![composer](https://camo.githubusercontent.com/08623182d7b037246f11c0ad4aec3fe405dcf9d668058398497abd1a9a770e9d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f6d706f7365722d253345312e362d626c75652e737667)![php](https://camo.githubusercontent.com/62fb387978945851f2340aa880bfc2a4164d74b4efcdf06b40833d91998dd145/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253345352e362d677265656e2e737667)![php](https://camo.githubusercontent.com/0d20998129714e2662748003f3e0fab165e7f10d9dd4eb097376217b12c07b15/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d372e782d677265656e2e737667)![php](https://camo.githubusercontent.com/c8563252142a1b6b18a7d6bcbbbb93f8d6d5c975876bb5b5a2d5fa176292d955/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d382e782d677265656e2e737667)![CocoaPods](https://camo.githubusercontent.com/347353606ed8f26b45bcf9da083db0063fa1dadd1baef36a5f3bf9ce1d127548/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f63732d37302532352d79656c6c6f772e737667)

> Dynamic blade components are not supported (reason: performance purpose) and custom features aimed for blade, but everything else is supported.

Comparison with Twig
--------------------

[](#comparison-with-twig)

> (spoiler) Twig is slower. 😊

First Time TimeFirst Time MemoryOverload First TimeSecond TimeSecond Time MemoryBladeOne1962ms2024kb2631917ms2024kbTwig3734ms2564kb1233604ms2327kbWhat it was tested?. It was tested two features (that are the most used): It was tested with an array with 1000 elements and tested many times.

[Comparison with Twig](https://github.com/EFTEC/BladeOne/wiki/Comparison-with-Twig)

NOTE about questions, reports, doubts or suggesting:
----------------------------------------------------

[](#note-about-questions-reports-doubts-or-suggesting)

✔ If you want to open an inquiry, do you have a doubt, or you find a bug, then you could open an [ISSUE](https://github.com/EFTEC/BladeOne/issues).
Please, don't email me (or send me PM) directly for question or reports.
Also, if you want to reopen a report, then you are open to do that.
I will try to answer all and every one of the question (in my limited time).

Some example
------------

[](#some-example)

[ExampleTicketPHP](https://github.com/jorgecc/ExampleTicketPHP)[Example cupcakes](https://github.com/EFTEC/example.cupcakes)[Example Search](https://github.com/EFTEC/example-search)[Example Editable Grid](https://github.com/EFTEC/example-php-editablegrid)[![example php bladeone](https://camo.githubusercontent.com/54b430c7161516534d99229cfcae75cf6b423c9a746aac42acb52ad5f0c5b8bb/68747470733a2f2f74686570726163746963616c6465762e73332e616d617a6f6e6177732e636f6d2f692f3436696b7061376661717677726533797537706a2e6a7067)](https://camo.githubusercontent.com/54b430c7161516534d99229cfcae75cf6b423c9a746aac42acb52ad5f0c5b8bb/68747470733a2f2f74686570726163746963616c6465762e73332e616d617a6f6e6177732e636f6d2f692f3436696b7061376661717677726533797537706a2e6a7067)[![example php bladeone cupcakes](https://github.com/EFTEC/example.cupcakes/raw/master/docs/result.jpg)](https://github.com/EFTEC/example.cupcakes/raw/master/docs/result.jpg)[![example php bladeone search](https://github.com/EFTEC/example-search/raw/master/img/search_bootstrap.jpg)](https://github.com/EFTEC/example-search/raw/master/img/search_bootstrap.jpg)[![example php bladeone search](https://github.com/EFTEC/example-php-editablegrid/raw/master/docs/final.jpg)](https://github.com/EFTEC/example-php-editablegrid/raw/master/docs/final.jpg)[Custom control #1](https://github.com/EFTEC/BladeOne/blob/master/examples/example_customcontrol.php)[Custom control #2](https://github.com/EFTEC/BladeOne/blob/master/examples/example_customcontrol2.php)Manual
------

[](#manual)

- [BladeOne Manual](https://github.com/EFTEC/BladeOne/wiki/BladeOne-Manual)
- [Template tags (views)](https://github.com/EFTEC/BladeOne/wiki/Template-tags)
    - [Template variables](https://github.com/EFTEC/BladeOne/wiki/Template-variables)
    - [Template inheritance](https://github.com/EFTEC/BladeOne/wiki/Template-inheritance)
    - [Template component](https://github.com/EFTEC/BladeOne/wiki/Template-Component)
    - [Template stack](https://github.com/EFTEC/BladeOne/wiki/Template-stack)
    - [Template asset, relative, base, current and canonical links](https://github.com/EFTEC/BladeOne/wiki/Template-Asset,-Relative,-Base-and-Canonical-Links)
    - [Template calling methods](https://github.com/EFTEC/BladeOne/wiki/Template-calling-methods)
    - [Template logic](https://github.com/EFTEC/BladeOne/wiki/Template-logic)
    - [Template loop](https://github.com/EFTEC/BladeOne/wiki/Template-loop)
    - [Template Pipes (Filter)](https://github.com/EFTEC/BladeOne/wiki/Template-Pipes-(Filter))
- [Custom Control](https://github.com/EFTEC/BladeOne/wiki/Custom-Control)
- [Methods of the class](https://github.com/EFTEC/BladeOne/wiki/Methods-of-the-class)
- [Injecting logic before the view (composer)](https://github.com/EFTEC/BladeOne/wiki/Injecting-logic-before-the-view-(composer))
- [Extending the class](https://github.com/EFTEC/BladeOne/wiki/Extending-the-class)
- [Using BladeOne with YAF Yet Another Framework](https://github.com/EFTEC/BladeOne/wiki/Using--BladeOne-with-YAF)
- [Differences between Blade and BladeOne](https://github.com/EFTEC/BladeOne/wiki/Differences-between-Blade-and-BladeOne)
- [Comparision with Twig (May-2020)](https://github.com/EFTEC/BladeOne/wiki/Comparison-with-Twig)
- [Changelog](https://github.com/EFTEC/BladeOne/wiki/Changelog)
- [Changes between 2.x and 3.0 and TODO](https://github.com/EFTEC/BladeOne/wiki/Changes-between-2.x-and-3.0-and-TODO)
- [Code Protection (Sourceguardian and similars)](https://github.com/EFTEC/BladeOne/wiki/Code-Protection-(Sourceguardian-and-similars))

PHP 5.x support?
----------------

[](#php-5x-support)

This version does not support PHP 5.x anymore. However, you can use the old version that is 100% functional with PHP 5.6 and higher.

Laravel blade tutorial
----------------------

[](#laravel-blade-tutorial)

You can find some tutorials and example on the folder [Examples](examples).

You could also check the [Wiki](https://github.com/EFTEC/BladeOne/wiki)

About this version
------------------

[](#about-this-version)

By standard, The original Blade library is part of Laravel (Illuminate components) and to use this template library, you require install Laravel and Illuminate-view components. The syntax of Blade is pretty nice and bright. It's based in C# Razor (another template library for C#). It's starting to be considered a de-facto standard template system for many PHP (Smarty has been riding off the sunset since years ago) so, if we can use it without Laravel then it's a big plus for many projects. In fact, in theory, it is even possible to use with Laravel. Exists different versions of Blade Template that runs without Laravel, but most requires 50 or more files, and those templates add a new level of complexity, so they are not removing Laravel but hiding:

- More files to manage.
- Changes to the current project (if you want to integrate the template into an existent one)
- Incompatibilities amongst other projects.
- Slowness (if your server is not using op-cache)
- Most of the code in the original Blade is used for future use, including the chance to use a different template engine.
- Some Laravel legacy code.

This project uses a single file called BladeOne.php and a single class (called BladeOne). If you want to use it then include it, creates the folders and that's it!. Nothing more (not even namespaces)\*\[\]: It is also possible to use Blade even with Laravel or any other framework. After all, BladeOne is native, so it's possible to integrate into almost any project.

Why to use it instead of native PHP?
------------------------------------

[](#why-to-use-it-instead-of-native-php)

### Separation of concerns

[](#separation-of-concerns)

Let’s say that we have the next code

```
//some PHP code
// some HTML code
// more PHP code
// more HTML code.
```

It leads to a mess of a code. For example, let’s say that we oversee changing the visual layout of the page. In this case, we should change all the code, and we could even break part of the programming.
Instead, using a template system works in the next way:

```
// some php code
ShowTemplate();
```

We are separating the visual layer from the code layer. As a plus, we could assign a non-php-programmer in charge to edit the template, and he/she doesn’t need to touch or know our php code.

Security
--------

[](#security)

Let’s say that we have the next exercise (it’s a dummy example)

```
$name=@$_GET['name'];
echo "my name is ".$name;
```

It could be separates as two files:

```
$name=@$_GET['name'];
include "template.php";
```

```
// template.php
echo "my name is ".$name;
```

Even for this simple example, there is a risk of hacking. How? A user could send malicious code by using the GET variable, such as html or even javascript. The second file should be written as follows:

```
 // template.php
echo "my name is ".html_entities($name);
```

html\_entities should be used in every single part of the visual layer (html) where the user could inject malicious code, and it’s a real tedious work. BladeOne does it automatically.

```
// template.blade.php
My name is {{$name}}
```

Easy to use
-----------

[](#easy-to-use)

BladeOne is focused on an easy syntax that it's fast to learn and to write, while it could keep the power of PHP.

Let's consider the next template:

```

         >

```

With BladeOne, we could do the same with

```

    @foreach($countries as $c)
        value}} >{{echo html_entities($c->text)}}
    @nextforeach

```

And if we use thehtml extension we could even reduce to

```
@select('id1')
    @items($countries,'value','text','','')
@endselect()
```

### Performance

[](#performance)

This library works in two stages.

The first is when the template calls the first time. In this case, the template compiles and store in a folder.
The second time the template calls then, it uses the compiled file. The compiled file consist mainly in native PHP, so **the performance is equals than native code.** since the compiled version IS PHP.

### Scalable

[](#scalable)

You could add and use your own function by adding a new method (or extending) to the BladeOne class. NOTE: The function should start with the name "compile"

```
protected function compileMyFunction($expression)
{
    return $this->phpTag . "echo 'YAY MY FUNCTION IS WORKING'; ?>";
}
```

Where the function could be used in a template as follows

```
@myFunction('param','param2'...)
```

Alternatively, BladeOne allows running arbitrary code from any class or method if its defined.

```
{{SomeClass::SomeMethod('param','param2'...)}}
```

Install (pick one of the next one)
----------------------------------

[](#install-pick-one-of-the-next-one)

1. Download the file manually then unzip (using WinRAR,7zip or any other program)
2. git clone  (it doesn't include the examples)
3. Composer. See [usage](#usage)
4. wget unzip master.zip

Usage
-----

[](#usage)

If you use **composer**, then you could add the library using the next command (command line)

```
composer require eftec/bladeone
```

If you don't use it, then you could download the library and include it manually.

### Explicit definition

[](#explicit-definition)

```
use eftec\bladeone\BladeOne;

$views = __DIR__ . '/views';
$cache = __DIR__ . '/cache';
$blade = new BladeOne($views,$cache,BladeOne::MODE_DEBUG); // MODE_DEBUG allows to pinpoint troubles.
echo $blade->run("hello",array("variable1"=>"value1")); // it calls /views/hello.blade.php
```

Where `$views` is the folder where the views (templates not compiled) will be stored. `$cache` is the folder where the compiled files will be stored.

In this example, the BladeOne opens the template **hello**. So in the views-folder it should exist a file called **hello.blade.php**

views/hello.blade.php:

```
Title
{{$variable1}}
```

### Implicit definition

[](#implicit-definition)

In this mode, it uses the folders `__DIR__/views` and `__DIR__/compiles`, also it uses the mode as MODE\_AUTO.

```
use eftec\bladeone\BladeOne;

$blade = new BladeOne(); // MODE_DEBUG allows to pinpoint troubles.
echo $blade->run("hello",array("variable1"=>"value1")); // it calls /views/hello.blade.php
```

### Injection

[](#injection)

You can inject the Bladeone using an existing instance of it. If there is no instance, then it will create a new one using the default folders.

```
$blade=BladeOne::$instance;
echo $blade->run("hello",array("variable1"=>"value1")); // it calls /views/hello.blade.php

```

### Fluent

[](#fluent)

```
use eftec\bladeone\BladeOne;

$blade = new BladeOne(); // MODE_DEBUG allows to pinpoint troubles.
echo $blade->setView('hello')    // it sets the view to render
           ->share(array("variable1"=>"value1")) // it sets the variables to sends to the view
           ->run(); // it calls /views/hello.blade.php
```

Filter (Pipes)
--------------

[](#filter-pipes)

It is possible to modify the result by adding filters to the result.

Let's say we have the next value $name='Jack Sparrow'

```
$blade=new BladeOne();
$blade->pipeEnable=true; // pipes are disable by default so it must be enable.
echo $blade->run('template',['name'=>'Jack Sparrow']);
```

Our view could look like:

```
 {{$name}}  or {!! $name !!} // Jack Sparrow
```

What if we want to show the name in uppercase?.

We could do in our code $name=strtoupper('Jack Sparrow'). With Pipes, we could do the same as follows:

```
 {{$name | strtoupper}} // JACK SPARROW
```

We could also add arguments and chain methods.

```
 {{$name | strtoupper | substr:0,5}} // JACK
```

You can find more information on

Security (optional)
-------------------

[](#security-optional)

```
require "vendor/autoload.php";

Use eftec\bladeone;

$views = __DIR__ . '/views';
$cache = __DIR__ . '/cache';
$blade=new bladeone\BladeOne($views,$cache,BladeOne::MODE_AUTO);

$blade->setAuth('johndoe','admin'); // where johndoe is an user and admin is the role. The role is optional

echo $blade->run("hello",array("variable1"=>"value1"));
```

If you log in using blade then you could use the tags @auth/@endauth/@guest/@endguest

```
@auth
    // The user is authenticated...
@endauth

@guest
    // The user is not authenticated...
@endguest
```

or

```
@auth('admin')
    // The user is authenticated...
@endauth

@guest('admin')
    // The user is not authenticated...
@endguest
```

### Custom controls.

[](#custom-controls)

There are multiples ways to create a new control (tag)

Extensions Libraries (optional)
-------------------------------

[](#extensions-libraries-optional)

[BladeOneCache Documentation](BladeOneCache.md)

Calling a static methods inside the template.
---------------------------------------------

[](#calling-a-static-methods-inside-the-template)

Since **3.34**, BladeOne allows to call a static method inside a class.

Let's say we have a class with namespace \\namespace1\\namespace2

```
namespace namespace1\namespace2 {
    class SomeClass {
        public static function Method($arg='') {
            return "hi world";
        }
    }
}
```

### Method 1 PHP Style

[](#method-1-php-style)

We could add a "use" in the template. Example:

Add the next line to the template

```
@use(\namespace1\namespace2)
```

and the next lines to the template (different methods)

```
{{SomeClass::Method()}}
{!! SomeClass::Method() !!}
@SomeClass::Method()
```

> All those methods are executed at runtime

### Method 2 Alias

[](#method-2-alias)

Or we could define alias for each class.

php code:

```
    $blade = new BladeOne();
    // with the method addAliasClasses
    $blade->addAliasClasses('SomeClass', '\namespace1\namespace2\SomeClass');
    // with the setter setAliasClasses
    $blade->setAliasClasses(['SomeClass'=>'\namespace1\namespace2\SomeClass']);
    // or directly in the field
    $blade->aliasClasses=['SomeClass'=>'\namespace1\namespace2\SomeClass'];
```

Template:

```
{{SomeClass::Method()}}
{!! SomeClass::Method() !!}
@SomeClass::Method()
```

> We won't need alias or use for global classes.

Named argument (since 3.38)
---------------------------

[](#named-argument-since-338)

**BladeOne** allows named arguments. This feature must be implemented per function.

Let's say the next problem:

It is the old library BladeOneHtml:

```
@select('id1')
    @item('0','--Select a country--',"",class='form-control'")
    @items($countries,'id','name',"",$countrySelected)
@endselect

```

And it is the new library:

```
@select(id="aaa" value=$selection values=$countries alias=$country)
    @item(value='aaa' text='-- select a country--')
    @items( id="chkx" value=$country->id text=$country->name)
@endselect
```

The old method **select** only allows a limited number of arguments. And the order of the arguments is important.

The new method **select** allows adding different types of arguments

Command Line (CLI)
------------------

[](#command-line-cli)

[![docs/cli.png](docs/cli.png)](docs/cli.png)

BladeOne (since the version v4.2) allows to run some operations via command line (CLI)

How to run it?

- Go to your home path and call the PHP script as follows:

```
php vendor/bin/bladeonecli    # windows/linux/macos
# or you could execute the script as:
./vendor/bin/bladeonecli.bat  # windows
./vendor/bin/bladeonecli      # linux/macos
```

Or change you folder according to your installation.

And you can set the syntax as follows:

- **-templatepath** (optional) the template-path (view paths).
    - Example: '/folder/views' or 'views' (relative)
- **-compilepath** (optional) the compile-path.
    - Example: '/folder/compiles or 'compiles' (relative)
- **-clearcompile** It deletes the content of the compile-path
- **-createfolder** It creates the "compile" and "template" folders
- **-check** It checks the library

Clear the compile-folder

```
php vendor/lib/eftec/bladeone/lib/BladeOne.php -clearcompile
```

Check the folders, if the folder exists, if it has the right permissions, etc.

```
php vendor/lib/eftec/bladeone/lib/BladeOne.php -check
```

Example to clear the compile-folder using a custom compile path

```
php vendor/lib/eftec/bladeone/lib/BladeOne.php -clearcompile -compilepath mycompile # relative path to the current location
php vendor/lib/eftec/bladeone/lib/BladeOne.php -clearcompile -compilepath /var/mycompile # absolute path (Linux/MacOS)
php vendor/lib/eftec/bladeone/lib/BladeOne.php -clearcompile -compilepath c:\var\mycompile # absolute path (Windows)
```

BladeOneHtml
------------

[](#bladeonehtml)

It is a new extension to **BladeOne**. It allows creating HTML components easily and with near-to-native performance.

It uses a new feature of **BladeOne**: named arguments

Example to create a select:

```
@select(id="aaa" value=$selection values=$countries alias=$country)
    @item(value='aaa' text='-- select a country--')
    @items( id="chkx" value=$country->id text=$country->name)
@endselect
```

You could download it or add it via Composer

> composer require eftec/bladeonehtml

Collaboration
-------------

[](#collaboration)

You are welcome to use it, share it, ask for changes and whatever you want to. Just keeps the copyright notice in the file.

Future
------

[](#future)

- Blade locator/container

License
-------

[](#license)

MIT License. BladeOne (c) 2016-2024 Jorge Patricio Castro Castillo Blade (c) 2012 Laravel Team (This code is based and inspired in the work of the team of Laravel, however BladeOne is mostly an original work)

###  Health Score

15

—

LowBetter than 3% of packages

Maintenance27

Infrequent updates — may be unmaintained

Popularity1

Limited adoption so far

Community17

Small or concentrated contributor base

Maturity18

Early-stage or recently created project

 Bus Factor1

Top contributor holds 59.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/5029e0ad5278b4e3cdd5cebcc2ae0d2cb93698cd76f4afeb5fcc831ab1dfda10?d=identicon)[joanrodas](/maintainers/joanrodas)

---

Top Contributors

[![jorgecc](https://avatars.githubusercontent.com/u/9570242?v=4)](https://github.com/jorgecc "jorgecc (235 commits)")[![jorgecc-business-account](https://avatars.githubusercontent.com/u/12418702?v=4)](https://github.com/jorgecc-business-account "jorgecc-business-account (56 commits)")[![jakewhiteley](https://avatars.githubusercontent.com/u/3481634?v=4)](https://github.com/jakewhiteley "jakewhiteley (38 commits)")[![qurben](https://avatars.githubusercontent.com/u/589651?v=4)](https://github.com/qurben "qurben (18 commits)")[![m-mohr](https://avatars.githubusercontent.com/u/8262166?v=4)](https://github.com/m-mohr "m-mohr (10 commits)")[![Johntaa](https://avatars.githubusercontent.com/u/3445006?v=4)](https://github.com/Johntaa "Johntaa (8 commits)")[![AVONnadozie](https://avatars.githubusercontent.com/u/10802366?v=4)](https://github.com/AVONnadozie "AVONnadozie (5 commits)")[![fbett](https://avatars.githubusercontent.com/u/24937658?v=4)](https://github.com/fbett "fbett (4 commits)")[![themagnifico](https://avatars.githubusercontent.com/u/4053150?v=4)](https://github.com/themagnifico "themagnifico (3 commits)")[![rogervila](https://avatars.githubusercontent.com/u/6053012?v=4)](https://github.com/rogervila "rogervila (3 commits)")[![joanrodas](https://avatars.githubusercontent.com/u/47475754?v=4)](https://github.com/joanrodas "joanrodas (2 commits)")[![deployHuman](https://avatars.githubusercontent.com/u/25264787?v=4)](https://github.com/deployHuman "deployHuman (2 commits)")[![vishtany](https://avatars.githubusercontent.com/u/4468711?v=4)](https://github.com/vishtany "vishtany (2 commits)")[![BADAKAA](https://avatars.githubusercontent.com/u/81486945?v=4)](https://github.com/BADAKAA "BADAKAA (2 commits)")[![xy2z](https://avatars.githubusercontent.com/u/4496997?v=4)](https://github.com/xy2z "xy2z (1 commits)")[![bassauer-storms-media](https://avatars.githubusercontent.com/u/25793506?v=4)](https://github.com/bassauer-storms-media "bassauer-storms-media (1 commits)")[![daveismynamecom](https://avatars.githubusercontent.com/u/60222583?v=4)](https://github.com/daveismynamecom "daveismynamecom (1 commits)")[![Luc-cpl](https://avatars.githubusercontent.com/u/20001157?v=4)](https://github.com/Luc-cpl "Luc-cpl (1 commits)")[![marky291](https://avatars.githubusercontent.com/u/5384515?v=4)](https://github.com/marky291 "marky291 (1 commits)")[![pafernandez-oesia](https://avatars.githubusercontent.com/u/96843912?v=4)](https://github.com/pafernandez-oesia "pafernandez-oesia (1 commits)")

### Embed Badge

![Health badge](/badges/joanrodas-plubo-template-engine/health.svg)

```
[![Health](https://phpackages.com/badges/joanrodas-plubo-template-engine/health.svg)](https://phpackages.com/packages/joanrodas-plubo-template-engine)
```

###  Alternatives

[mustache/mustache

A Mustache implementation in PHP.

3.3k44.6M291](/packages/mustache-mustache)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9682.1M97](/packages/roots-acorn)[whitecube/nova-flexible-content

Flexible Content &amp; Repeater Fields for Laravel Nova.

8053.0M25](/packages/whitecube-nova-flexible-content)[mopa/bootstrap-bundle

Easy integration of twitters bootstrap into symfony2

7042.9M33](/packages/mopa-bootstrap-bundle)[limenius/react-bundle

Client and Server-side react rendering in a Symfony Bundle

3871.2M](/packages/limenius-react-bundle)[symfony/ux-icons

Renders local and remote SVG icons in your Twig templates.

545.8M69](/packages/symfony-ux-icons)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
