# Slim/twig-view 3.0.0 in Slim 4

**URL:** https://discourse.slimframework.com/t/slim-twig-view-3-0-0-in-slim-4/3788
**Category:** Questions
**Created:** [January 11, 2020, 4:24pm UTC](https://discourse.slimframework.com/t/slim-twig-view-3-0-0-in-slim-4/3788 "2020-01-11T16:24:02Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![mardon](https://avatars.discourse-cdn.com/v4/letter/m/e480ec/32.png) [@mardon](https://discourse.slimframework.com/u/mardon)
#### Post date: [January 11, 2020, 4:24pm UTC](https://discourse.slimframework.com/t/slim-twig-view-3-0-0-in-slim-4/3788/1 "2020-01-11T16:24:02Z")

</div>

Hi all,

is any example how i use slim/twig-view": “^3.0” in slim 4?

---

<div class="post-metadata">

### Author: ![muawijhe](https://yyz2.discourse-cdn.com/flex030/user_avatar/discourse.slimframework.com/muawijhe/32/1062_2.png) [@muawijhe](https://discourse.slimframework.com/u/muawijhe)
#### Post date: [January 11, 2020, 4:51pm UTC](https://discourse.slimframework.com/t/slim-twig-view-3-0-0-in-slim-4/3788/2 "2020-01-11T16:51:25Z")

</div>

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;
});
```

---

<div class="post-metadata">

### Author: ![mardon](https://avatars.discourse-cdn.com/v4/letter/m/e480ec/32.png) [@mardon](https://discourse.slimframework.com/u/mardon)
#### Post date: [January 11, 2020, 4:55pm UTC](https://discourse.slimframework.com/t/slim-twig-view-3-0-0-in-slim-4/3788/3 "2020-01-11T16:55:44Z")

</div>

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();
```

---

<div class="post-metadata">

### Author: ![hansl](https://avatars.discourse-cdn.com/v4/letter/h/3be4f8/32.png) [@hansl](https://discourse.slimframework.com/u/hansl)
#### Post date: [February 4, 2020, 10:36am UTC](https://discourse.slimframework.com/t/slim-twig-view-3-0-0-in-slim-4/3788/4 "2020-02-04T10:36:15Z")

</div>

Got twig to work for slim4 with slim/slim-skeleton :

```auto
composer require slim/twig-view
    Using version ^3.0 for slim/twig-view

```

settings.php (similar to muawijhe)

```auto
return function (ContainerBuilder $containerBuilder) {
    $containerBuilder->addDefinitions([
        'settings' => [
            'twig' => [
                'path_templates' => __DIR__. '/../templates',
                'path_cache' => false
            ],
        ],
    ]);
};

```

dependencies.php

```auto
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

```auto
    $app->get('/', \App\Application\Actions\Web\HomeAction::class);

```

HomeAction.php

```auto
<?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

```auto
{% extends "layout/layout.twig" %}

{% block content %}

    <div id="content" class="container">
        Current time: {{now}}
    </div>

{% endblock %}

```

I hope it saves someone some time.  
– Hans
