onethity / slim4-twig-view
Slim Framework 4 twig view forked.
3.0.0-beta
2019-08-20 00:55 UTC
Requires
- php: ^7.1
- psr/http-message: ^1.0
- twig/twig: ^2.8
Requires (Dev)
- php-di/php-di: ^6.0
- phpunit/phpunit: ^7.5
- psr/http-factory: ^1.0
- slim/slim: ^4.0
This package is not auto-updated.
Last update: 2024-04-22 18:43:04 UTC
README
This is a slim/twig-view component, but forked for Slim 4.
Install
Via Composer
$ composer require onethity/slim4-twig-view
Requires Slim Framework 4 and PHP 7.1.0 or newer.
Usage
// Create Container $container = new Container(); // Set container to create App with on AppFactory AppFactory::setContainer($container); $app = AppFactory::create(); // Register Twig View helper $container->set('view', function ( ) use ($app) { $view = new \Slim\Views\Twig(__DIR__ . '/../tpl/', [ 'cache' => false, ]); // Instantiate and add Slim specific extension $uriFactory = new \Slim\Psr7\Factory\UriFactory(); $uri = $uriFactory->createFromGlobals($_SERVER); $routeParser = $app->getRouteCollector()->getRouteParser(); $basePath = $app->getBasePath(); $view->addExtension(new \Slim\Views\TwigExtension($routeParser, $uri, $basePath)); return $view; }); // Define named route $app->get('/hello/{name}', function ($request, $response, $args) { return $this->get('view')->render($response, 'index.html.twig', [ 'name' => $args['name'] ]); })->setName('profile'); // Render from string $app->get('/hi/{name}', function ($request, $response, $args) { $str = $this->get('view')->fetchFromString('<p>Hi, my name is {{ name }}.</p>', [ 'name' => $args['name'] ]); $response->getBody()->write($str); return $response; }); // Run app $app->run();
Custom template functions
TwigExtension
provides these functions to your Twig templates:
path_for()
- returns the URL for a given route.base_url()
- returns theUri
object's base URL.is_current_path()
- returns true is the provided route name and parameters are valid for the current path.current_path()
- renders the current path, with or without the query string.
You can use path_for
to generate complete URLs to any Slim application named route and use is_current_path
to determine if you need to mark a link as active as shown in this example Twig template:
{% extends "layout.html" %}
{% block body %}
<h1>User List</h1>
<ul>
<li><a href="{{ path_for('profile', { 'name': 'josh' }) }}" {% if is_current_path('profile', { 'name': 'josh' }) %}class="active"{% endif %}>Josh</a></li>
<li><a href="{{ path_for('profile', { 'name': 'andrew' }) }}">Andrew</a></li>
</ul>
{% endblock %}
Credits
License
The MIT License (MIT). Please see License File for more information.