--- layout: default permalink: engine/extensions/ title: Extensions --- Extensions ========== Creating extensions couldn't be easier, and can really make Plates sing for your specific project. Start by creating a class that implements `\League\Plates\Extension\ExtensionInterface`. Next, register your template [functions](/engine/functions/) within a `register()` method. ## Simple extensions example ~~~ php use League\Plates\Engine; use League\Plates\Extension\ExtensionInterface; class ChangeCase implements ExtensionInterface { public function register(Engine $engine) { $engine->registerFunction('uppercase', [$this, 'uppercaseString']); $engine->registerFunction('lowercase', [$this, 'lowercaseString']); } public function uppercaseString($var) { return strtoupper($var); } public function lowercaseString($var) { return strtolower($var); } } ~~~ To use this extension in your template, simply call your new functions: ~~~ php
Hello, =$this->e($this->uppercase($name))?>
~~~ They can also be used in a [batch](/templates/functions/#batch-function-calls) compatible function: ~~~ phpHello, =$this->e($this->case()->upper($name))?>
~~~ ## Loading extensions To enable an extension, load it into the [engine](/engine/) object using the `loadExtension()` method. ~~~ php $engine->loadExtension(new ChangeCase()); ~~~ ## Accessing the engine and template It may be desirable to access the `engine` or `template` objects from within your extension. Plates makes both of these objects available to you. The engine is automatically passed to the `register()` method, and the template is assigned as a parameter on each function call. ~~~ php use League\Plates\Engine; use League\Plates\Extension\ExtensionInterface; class MyExtension implements ExtensionInterface { protected $engine; public $template; // must be public public function register(Engine $engine) { $this->engine = $engine; // Access template data: $data = $this->template->data(); // Register functions // ... } } ~~~