A Mustache service provider for Pimple and Silex.

2.0.0-rc.3 2020-02-19 08:27 UTC

This package is auto-updated.

Last update: 2024-05-19 17:25:14 UTC


Provides Mustache integration for the Pimple dependency-injection container or the Silex application micro-framework.


Add clippings/mustache-provider to your project's Composer dependencies:

composer require clippings/mustache-provider


  • mustache.path (optional): Path to the directory containing Mustache template files.

  • mustache.partials_path (optional): Path to the directory containing Mustache partial template files. If none is specified, this will default to mustache.path.

  • mustache.partials (optional): An associative array of template names to template contents. Use this if you want to define partials inline.

  • mustache.helpers (optional): An associative array of Mustache helpers. See the Mustache.php helpers documentation for more information.

  • mustache.options (optional): An associative array of Mustache options. See the Mustache.php documentation for more information.


  • mustache.loader (optional): A Mustache template loader instance. This loader will use the mustache.path option you provided. You can also replace the loader with something awesome of your own.

  • mustache.partials_loader (optional): The Mustache template loader used to load partials. By default, this will load templates from either your the mustache.partials_path or mustache.partials configuration options. You can also replace the partials loader with another loader of your choice.



$app->register(new Mustache\MustacheServiceProvider, array(
    'mustache.path' => __DIR__.'/../views',
    'mustache.options' => array(
        'cache' => __DIR__.'/../tmp/cache/mustache',


The Mustache provider provides a mustache service:


$app->get('/hello/{name}', function ($name) use($app) {
    return $app['mustache']->render('hello', array(
        'name' => ucfirst($name),

This will render the hello.mustache file from your application's views directory.

Template Loading

The Mustache service provider ships with a Filesystem template loader enabled by default. All you have to do to get things off the ground is set a mustache.path option to tell it where your templates live. But you can swap that loader out for any other Mustache Loader.

For +10 Awesome, you should check out the Inline template loader:


// ...

$app->register(new MustacheServiceProvider, array(
    'mustache.loader' => new Mustache_Loader_InlineLoader(__FILE__, __COMPILER_HALT_OFFSET__)

$app->get('/{name}', function($name) use ($app) {
    return $app['mustache']->render('hello', compact('name'));
->value('name', 'world');

// ...


@@ hello
Hello, {{ name }}!

The Trait

Mustache\MustacheApplicationTrait adds a render helper to your app:


use Silex\Application;

class MyApplication extends Application
    use \Mustache\MustacheApplicationTrait;

$app = new MyApplication;

Now you can just call render:


return $app->render('hello', array('name' => 'Justin'));

Or BYO Response:

$response = new Response;

return $app->render('hello', array('name' => 'Justin'), $response);

It also provides a renderTemplate helper which returns a rendered string instead of a Response object.


You can mess with Mustache before using it by extending the mustache service:


$app['mustache'] = $app->factory($app->extend('mustache', function ($mustache, $app) {
    $mustache->addHelper('app', $app);

    return $mustache;