dflydev / theme-twig-extension
Twig Extension for Theme
Requires
- php: >=5.3.3
- dflydev/theme: 1.*@dev
- twig/twig: ~1.9
This package is auto-updated.
Last update: 2024-10-29 03:58:37 UTC
README
Installation
Through Composer as dflydev/theme-twig-extension.
Usage
The following examples use the Symfony Routing implementation of
ResourceUrlGeneratorInterface
.
<?php use Dflydev\Theme\ResourceUrlGenerator\SymfonyRoutingResourceUrlGenerator; use Dflydev\Twig\Extension\Theme\ThemeTwigExtension; // Assumes $themeProvider, $pathMapper, $urlGenerator, and $twig // are already created and ready to be used. $resourceUrlGenerator = new SymfonyRoutingResourceUrlGenerator( $themeProvider, $pathMapper, $urlGenerator ); $themeTwigExtension = new ThemeTwigExtension( $resourceUrlGenerator ); $twig->addExtension($themeTwigExtension);
Once enabled, Theme resources can be referenced by:
{{ theme_resource('css/main.css') }}
If css/main.css
is accessible directly via the Theme instances docroot
(as determined by the PathMapperInterface
) then a URL to the public
resource will be used.
If css/main.css
is not accessible directly, the UrlGeneratorInterface
implementation will be used to generate a URL to the embedded Theme
controllers.
All implementations of ResourceUrlGeneratorInterface
should follow the
pattern of:
- Checking to see if the resource is available publicly and using that if available.
- Generating a fallback URL to expose non-public resources.
Controller Requirements Example (Silex + Symfony Routing)
-
_dflydev_typed_theme_handler: Expects three params,
type
,name
, and theresource
. Name can be changed by callingsetTypedRouteName()
.Example:
<?php $app->get('/_theme_typed/{type}/{name}/resources/{resource}', function($type, $name, $resource) use ($app) { // do something to handle the theme request and return the // contents of the theme resource manually. }) ->assert('name', '.+') ->assert('resource', '.+') ->bind('_dflydev_typed_theme_handler');
-
_dflydev_theme_handler: Expects two params,
name
and theresource
. Name can be changed by callingsetTypedRouteName()
.Example:
<?php $app->get('/_theme/{name}/resources/{resource}', function($name, $resource) use ($app) { // do something to handle the theme request and return the // contents of the theme resource manually. }) ->assert('name', '.+') ->assert('resource', '.+') ->bind('_dflydev_theme_handler');
License
MIT, see LICENSE.
Community
If you have questions or want to help out, join us in the #dflydev channel on irc.freenode.net.