fiskhandlarn / blade
A library for using Laravel Blade templates in WordPress/WordPlate.
Installs: 5 044
Dependents: 0
Suggesters: 0
Security: 0
Stars: 37
Watchers: 3
Forks: 5
Open Issues: 5
Requires
- php: ^7.3 || ^8.0
- illuminate/view: ^8.83
- soberwp/controller: ^2.1
Requires (Dev)
- 10up/wp_mock: ^0.4.2
- phpstan/phpstan: ^1.8
- phpunit/phpunit: 9.4.4
- squizlabs/php_codesniffer: ^3.7
Suggests
- wordplate/wordplate: WordPlate is a modern WordPress stack which simplifies WordPress development (^9.0).
README
A library for using Laravel Blade templates in WordPress/WordPlate.
Installation
Require this package, with Composer, in the root directory of your project.
$ composer require fiskhandlarn/blade
Usage
Render
Use helper function blade
:
blade('index', ['machine' => 'Voight-Kampff']);
(This renders and echoes the template /resources/views/index.blade.php
and caches it to /storage/views
.)
... or instantiate Blade
by passing the folder(s) where your view files are located, and a cache folder. Render a template by calling the render
method.
use Fiskhandlarn\Blade; $blade = new Blade(get_stylesheet_directory() . '/views', get_stylesheet_directory() . '/cache'); echo $blade->render('index', ['machine' => 'Voight-Kampff']);
Render with data from a controller class
Use helper function blade_controller
:
blade_controller('index', 'Index');
(This renders and echoes the template /resources/views/index.blade.php
with data generated from App\Controllers\Index
.)
Controller classes must extend Fiskhandlarn\BladeController
.
... or use the renderController
method on a Blade
object:
echo $blade->renderController('index', 'Index');
You can also pass additional data (this won't override properties from the controller though):
blade_controller('index', 'Index', ['lifespan' => "A coding sequence cannot be revised once it's been established."]);
echo $blade->renderController('index', 'Index', ['lifespan' => "A coding sequence cannot be revised once it's been established."]);
See soberwp/controller for more info on how to use controllers.
Supported features:
Unsupported features:
Untested features:
Unnecessary features:
- Using Functions (this can be achieved with vanilla PHP)
- Template Override Option
Custom directive
Create a custom directive with helper function blade_directive
:
blade_directive('datetime', function ($expression) { return "<?php echo with({$expression})->format('Y-m-d H:i:s'); ?>"; });
... or use the directive
method on a Blade
object:
$blade->directive('datetime', function ($expression) { return "<?php echo with({$expression})->format('Y-m-d H:i:s'); ?>"; });
Then you can use the directive in your templates:
{{-- In your Blade template --}} @php $dateObj = new DateTime('2019-11-01 00:02:42') @endphp @datetime($dateObj)
Custom composer
Create a custom composer with helper function blade_composer
:
// Make variable available in all views blade_composer('*', function ($view) { $view->with(['badge' => 'B26354']); });
... or use the composer
method on a Blade
object:
// Make variable available in all views $blade->composer('*', function ($view) { $view->with(['badge' => 'B26354']); });
Share variables
Share variables across all templates with helper function blade_share
:
// Make variable available in all views blade_share(['badge' => 'B26354']);
... or use the share
method on a Blade
object:
$blade->share(['badge' => 'B26354']);
Extension
The Blade
class passes all method calls to the internal compiler (see documentation) or view factory (see documentation for info on exists
, first
and creator
).
Cache
If WP_DEBUG
is set to true
templates will always be rendered and updated.
Multisite
If run on a WordPress Multisite the cached files will be separated in subfolders by each site's blog id.
Filters
Use the blade/view/paths
filter to customize the base paths where your templates are stored. (Default value is /resources/views
.)
add_filter('blade/view/paths', function ($paths) { $paths = (array) $paths; $paths[] = get_stylesheet_directory() . '/views'; return $paths; });
Use the blade/cache/path
filter to customize the cache folder path. (Default value is /storage/views
.)
add_filter('blade/cache/path', function ($path) { $uploadDir = wp_upload_dir(); return $uploadDir['basedir'] . '/.bladecache/'; });
Use the blade/cache/path
filter to control creation of cache folder. (Default value is true
.)
add_filter('blade/cache/create', '__return_false');
Use the blade/controller/namespace
filter to customize the controller namespace. (Default value is App\Controllers
.)
add_filter('blade/controller/namespace', function () { return 'MyApp\Controllers'; });