This package contains the rendering mechanism of the Mouf framework. It is a mechanism allowing packages/templates/developers to overload a default template for various HTML objects.


Latest Stable Version Total Downloads Latest Unstable Version License Build Status Coverage Status Scrutinizer Code Quality

What is this package?

This package contains a rendering mechanism to render objects in HTML.

For application developers

You are an application developer? Learn how to use the rendering system with PHP files or Twig templates to render your objects or overload renderers provided by packages.

See the video!

<iframe width="480" height="360" src="//" frameborder="0" allowfullscreen></iframe>

For package developers

You are a package developer? Learn how to use the rendering system to allow other users to overload your renderers easily.


$ composer require mouf/html.renderer ^2

The easiest way to use this package is through a dependency injection container compatible with container-interop/service-providers.

Once installed, you need to register the Mouf\Html\Renderer\RendererServiceProvider into your container.

If your container supports thecodingmachine/discovery integration, you have nothing to do. Otherwise, refer to your framework or container's documentation to learn how to register service providers.

Provided services

This service provider provides the following services:

Service name Description
RendererInterface::class The default renderer. An alias to ChainRenderer::class
ChainRenderer::class A composite renderer asking all other renderers in turn if they can render an object.
customRenderers A list of RendererInterface objects at the "custom" level (top most level). This list is consumed by the ChainRenderer
customRenderer A default custom renderer is provided by this package. Out of the box, template files are expected to be in the src/templates directory.
packageRenderers A list of RendererInterface objects at the "package" level (bottom level). This list is consumed by the ChainRenderer. When a package you install has a renderer, it will add the renderer to this list (most of the time using the AbstractPackageRendererServiceProvider
InitRendererFacadeMiddleware::class A PSR-15 middleware that is used to initialize global access to the default renderer. This is needed for the Renderable trait to work.

Extended services

This service provider extends those services:

Name Compulsory Description
MiddlewareListServiceProvider::MIDDLEWARES_QUEUE yes The InitRendererFacadeMiddleware::class registers itself in the list of PSR-15 middlewares.

Mouf package

This package was originally part of Mouf (, an effort to ensure good developing practices by providing a graphical dependency injection framework.

V2 makes the package framework-agnostic, so it can be used in any framework.

Basically, you will find in this package some Renderers. These are classes in charge of rendering other objects. They usually rely on template files, that contain the HTML to be rendered. Renderers can be chained, and the first renderer that knows how to render an object will be in charge of the rendering.


Your template or a custom template is not applied.

  • Purge the cache with the red button in mouf.
  • You use Ajax and you return html with echo (for example BCE).
    • By default an echo don't apply the template to make it
      • add the defaultRenderer (a class of Mouf\Html\Renderer\AutoChainRenderer) in your class
      • add your templateRenderer (a class of Mouf\Html\Renderer\FileBasedRenderer) in Bootstrap this is bootstrapRenderer
      • add the code before your call to the function toHTML: $this->defaultRenderer->setTemplateRenderer($this->templateRenderer);