quagga / twig-view
Slim Framework 4 view helper built on top of the Twig 3 templating component
Requires
- php: ^7.4 || ^8.0
- psr/http-message: ^1.1
- quagga/slim: ^4.12
- symfony/polyfill-php81: ^1.29
- twig/twig: ^3.8
Requires (Dev)
- phpspec/prophecy-phpunit: ^2.0
- phpstan/phpstan: ^1.10.59
- phpunit/phpunit: ^9.6
- psr/http-factory: ^1.0
- squizlabs/php_codesniffer: ^3.9
README
This is a Slim Framework view helper built on top of the Twig templating component. You can use this component to create and render templates in your Slim Framework application.
Install
Via Composer
$ composer require slim/twig-view
Requires Slim Framework 4, Twig 3 and PHP 7.4 or newer.
Usage
use DI\Container; use Slim\Factory\AppFactory; use Slim\Views\Twig; use Slim\Views\TwigMiddleware; require __DIR__ . '/vendor/autoload.php'; // Create Container $container = new Container(); AppFactory::setContainer($container); // Set view in Container $container->set('view', function() { return Twig::create('path/to/templates', ['cache' => 'path/to/cache']); }); // Create App $app = AppFactory::create(); // Add Twig-View Middleware $app->add(TwigMiddleware::createFromContainer($app)); // Define named route $app->get('/hello/{name}', function ($request, $response, $args) { return $this->get('view')->render($response, 'profile.html', [ '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();
Without container
use Slim\Factory\AppFactory; use Slim\Views\Twig; use Slim\Views\TwigMiddleware; require __DIR__ . '/vendor/autoload.php'; // Create App $app = AppFactory::create(); // Create Twig $twig = Twig::create('path/to/templates', ['cache' => 'path/to/cache']); // Add Twig-View Middleware $app->add(TwigMiddleware::create($app, $twig)); // Define named route $app->get('/hello/{name}', function ($request, $response, $args) { $view = Twig::fromRequest($request); return $view->render($response, 'profile.html', [ 'name' => $args['name'] ]); })->setName('profile'); // Render from string $app->get('/hi/{name}', function ($request, $response, $args) { $view = Twig::fromRequest($request); $str = $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:
url_for()
- returns the URL for a given route. e.g.: /hello/worldfull_url_for()
- returns the URL for a given route. e.g.: http://www.example.com/hello/worldis_current_url()
- returns true is the provided route name and parameters are valid for the current path.current_url()
- returns the current path, with or without the query string.get_uri()
- returns theUriInterface
object from the incomingServerRequestInterface
objectbase_path()
- returns the base path.
You can use url_for
to generate complete URLs to any Slim application named route and use is_current_url
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="{{ url_for('profile', { 'name': 'josh' }) }}" {% if is_current_url('profile', { 'name': 'josh' }) %}class="active"{% endif %}>Josh</a></li> <li><a href="{{ url_for('profile', { 'name': 'andrew' }) }}">Andrew</a></li> </ul> {% endblock %}
Tests
To execute the test suite, you'll need to clone the repository and install the dependencies.
$ git clone https://github.com/slimphp/Twig-View
$ composer install
$ composer test
Contributing
Please see CONTRIBUTING for details.
Security
If you discover any security related issues, please email security@slimframework.com instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.