Hi all,
is any example how i use slim/twig-view": “^3.0” in slim 4?
Hi all,
is any example how i use slim/twig-view": “^3.0” in slim 4?
I tried hard but in the end…
settings.php
return function (ContainerBuilder $containerBuilder) {
// Global Settings Object
$containerBuilder->addDefinitions([
'settings' => [
'displayErrorDetails' => true, // Should be set to false in production
'logger' => [
'name' => 'slim-app',
'path' => isset($_ENV['docker']) ? 'php://stdout' : __DIR__ . '/../logs/app.log',
'level' => Logger::DEBUG,
],
'twig' => [
'path_templates' => __DIR__ . '/../src/Views',
'path_cache' => __DIR__ . '/../var/cache/views'
]
],
]);
};
dependencies.php
// Twig Template System
// Register component on container
$containerBuilder->addDefinitions([
'view' => function (ContainerInterface $c) {
$settings = $c->get('settings');
$twigSettings = $settings['twig'];
$loader = new \Twig\Loader\FilesystemLoader(
$twigSettings['path_templates']
);
$options = [
'cache' => $twigSettings['path_cache']
];
$view = new \Twig\Environment(
$loader, $options
);
return $view;
},
]);
routes.php
$app->get('/magnotta', function (Request $request, Response $response, $args) {
$result = $this->get('view')->render(
'profile.html', [
'name' => 'magnotta'
]);
$this->get('logger')->info('magnotta');
$response->getBody()->write($result);
return $response;
});
i have this code, but in this i have error
use DI\Container;
use Slim\Factory\AppFactory;
use Slim\Middleware\ErrorMiddleware;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
require __DIR__ .'/vendor/autoload.php';
$container = new Container();
AppFactory::setContainer($container);
$app = AppFactory::create();
$errorMiddleware = new ErrorMiddleware(
$app->getCallableResolver(),
$app->getResponseFactory(),
true,
false,
false
);
$app->add($errorMiddleware);
$loader = new \Twig\Loader\FilesystemLoader('views');
$twig = new Twig($loader, [
'cache' => false
]);
$twigMiddleware = new TwigMiddleware($twig, $app->getRouteCollector()->getRouteParser(), '/');
$app->add($twigMiddleware);
$app->get('/', function (Request $request, Response $response) {
return $this->get('view')->render($response, 'home.twig');
});
$app->run();
Got twig to work for slim4 with slim/slim-skeleton :
composer require slim/twig-view
Using version ^3.0 for slim/twig-view
settings.php (similar to muawijhe)
return function (ContainerBuilder $containerBuilder) {
$containerBuilder->addDefinitions([
'settings' => [
'twig' => [
'path_templates' => __DIR__ . '/../templates',
'path_cache' => false
],
],
]);
};
dependencies.php
use Slim\Views\Twig;
use Twig\Loader\FilesystemLoader;
return function (ContainerBuilder $containerBuilder) {
$containerBuilder->addDefinitions([
Twig::class => function (ContainerInterface $c) {
$settings = $c->get('settings');
$twigSettings = $settings['twig'];
$loader = new FilesystemLoader(
$twigSettings['path_templates']
);
$options = [
'cache' => $twigSettings['path_cache']
];
$view = new Twig(
$loader,
$options
);
return $view;
},
]);
};
routes.php
$app->get('/', \App\Application\Actions\Web\HomeAction::class);
HomeAction.php
<?php
declare(strict_types=1);
namespace App\Application\Actions\Web;
use App\Application\Actions\Action;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Views\Twig;
class HomeAction extends Action
{
private $view;
public function __construct(
Twig $twig
) {
$this->view = $twig;
}
protected function action(): Response
{
$viewData = [
'now' => date('Y-m-d H:i:s'),
];
return $this->view->render(
$this->response,
'home/home.twig',
$viewData
);
}
}
home.twig
{% extends "layout/layout.twig" %}
{% block content %}
<div id="content" class="container">
Current time: {{now}}
</div>
{% endblock %}
I hope it saves someone some time.
– Hans