# Slim-4 How to get twig in controllers with PHP-DI

**URL:** <https://discourse.slimframework.com/t/slim-4-how-to-get-twig-in-controllers-with-php-di/4325>\
**Category:** Questions\
**Created:** [August 2, 2020, 3:53pm UTC](https://discourse.slimframework.com/t/slim-4-how-to-get-twig-in-controllers-with-php-di/4325 "2020-08-02T15:53:39Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Reveur](https://avatars.discourse-cdn.com/v4/letter/r/848f3c/32.png) [@Reveur](https://discourse.slimframework.com/u/Reveur)\
**Post date:** [August 2, 2020, 3:53pm UTC](https://discourse.slimframework.com/t/slim-4-how-to-get-twig-in-controllers-with-php-di/4325/1 "2020-08-02T15:53:39Z")

</div>

Hello, I dont know where I was wrong in my project, when I try to use Twig in my controller that doesn’t work.  
I use the following url “[http://localhost:8080/bob](http://localhost:8080/bob)”

Thank you in advance to any one who may be able to help me 🙂

This is the error :

 ![image](https://canada1.discourse-cdn.com/flex030/uploads/slimframework/original/2X/f/ff7c9236663faf44228847ef0c4c0785b8d14a6e.png)

**index.php**

```
<?php

use DI\Container;
use DI\Bridge\Slim\Bridge as SlimAppFactory;

require __DIR__. '/../vendor/autoload.php';

$container = new Container;

$settings = require __DIR__. '/../app/settings.php';
$settings($container);

$app = SlimAppFactory::create($container);

$views = require __DIR__. '/../app/views.php';
$views($app);

$middleware = require __DIR__. '/../app/middleware.php';
$middleware($app);

$routes = require __DIR__. '/../app/routes.php';
$routes($app);

$app->run();

```

**settings.php**

```
<?php

use \Psr\Container\ContainerInterface;

return function (ContainerInterface $container){
    $container->set('settings', function (){
        return [
            'displayErrorDetails' => true,
            'LogErrorDetails' => true,
            'logErrors' => true,
            'views' => [
                'path' => 'ressources/views',
                'settings' => ['cache'=> false],
            ]
        ];
    });
};

```

**middleware.php**

```
<?php

use Slim\App;

return function (App $app){
    $setting = $app->getContainer()->get('settings');
    $app->addErrorMiddleware(
        $setting['displayErrorDetails'],
        $setting['LogErrorDetails'],
        $setting['logErrors']
    );
};

```

**routes.php**

```
<?php

use Slim\App;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use App\Controllers\WelcomeController;

return function (App $app){
    $app->get('/', [WelcomeController::class, 'index']);
    $app->get('/{name}', [WelcomeController::class, 'show']);
};

```

**views.php**

```
<?php

use Slim\App;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
use Twig\Loader\FilesystemLoader;

return function (App $app) {
    
    $container = $app->getContainer();

    $container->set('view', function() use ($container) {
        $settings = $container->get('settings')['views'];
        $loader = new FilesystemLoader($settings['path']);
        return new Twig($loader, $settings['settings']);
    });

    $container->set('viewMiddleware', function() use ($app, $container) {
        return new TwigMiddleware($container->get('view'), $app->getRouteCollector()->getRouteParser()); 
    });
};

```

**WelcomeController.php**

```
<?php

namespace App\Controllers;

use Slim\Views\Twig as View;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;

class WelcomeController
{
    protected $views;

    public function __construct(Views $views)
    {
        return $this->view = $views;
    }

    public function index(Request $request, Response $response){
        $response->getBody()->write("Hello world!");
        return $response;
    }
    
    public function show(Request $request, Response $response, $name){
        return $view->render($response, 'auth\home.twig', ['User' => $name]);
    }
}
```

---

<div class="post-metadata">

**Author:** ![odan](https://avatars.discourse-cdn.com/v4/letter/o/9de053/32.png) [@odan](https://discourse.slimframework.com/u/odan)\
**Post date:** [August 2, 2020, 8:51pm UTC](https://discourse.slimframework.com/t/slim-4-how-to-get-twig-in-controllers-with-php-di/4325/2 "2020-08-02T20:51:42Z")

</div>

> public function \_\_construct(Views $views)

There is a typo. It should be `View`, like the alias `use Slim\Views\Twig as View;`

---

<div class="post-metadata">

**Author:** ![Reveur](https://avatars.discourse-cdn.com/v4/letter/r/848f3c/32.png) [@Reveur](https://discourse.slimframework.com/u/Reveur)\
**Post date:** [August 2, 2020, 8:57pm UTC](https://discourse.slimframework.com/t/slim-4-how-to-get-twig-in-controllers-with-php-di/4325/3 "2020-08-02T20:57:38Z")

</div>

Ho yeah totaly, miss this one, after multiple tests but I have the folllowing error after this correction.

_**Entry “App\Controllers\WelcomeController” cannot be resolved: Entry “Slim\Views\Twig” cannot be resolved: Entry “Twig\Loader\LoaderInterface” cannot be resolved: the class is not instantiable Full definition: Object ( class = #NOT INSTANTIABLE# Twig\Loader\LoaderInterface lazy = false ) Full definition: Object ( class = Slim\Views\Twig lazy = false \_\_construct( $loader = get(Twig\Loader\LoaderInterface) $settings = (default value) array ( ) ) ) Full definition: Object ( class = App\Controllers\WelcomeController lazy = false \_\_construct( $views = get(Slim\Views\Twig) ) )**_

---

<div class="post-metadata">

**Author:** ![odan](https://avatars.discourse-cdn.com/v4/letter/o/9de053/32.png) [@odan](https://discourse.slimframework.com/u/odan)\
**Post date:** [August 3, 2020, 12:44pm UTC](https://discourse.slimframework.com/t/slim-4-how-to-get-twig-in-controllers-with-php-di/4325/4 "2020-08-03T12:44:10Z")

</div>

Then you have to add a container definiton for `Twig::class`, e.g.

```php
use Slim\Views\Twig;
use Psr\Container\ContainerInterface;
// ...

return [
    // ...
    Twig::class => function (ContainerInterface $container) {
        $settings = $container->get('settings')['twig'];
        $twig = Twig::create($settings['paths'], $settings['options']);

        return $twig;
    },

    // ...   
];

```
