Closed kaxias closed 5 years ago
Hi @kaxias
What version of Twig-View are you using? Because the trace-entries 14 and 15 tell
#14 D:\laragon\www\container\vendor\slim\twig-view\src\Twig.php(124): Twig\Environment->render('auth/login.twig', Array)
#15 D:\laragon\www\container\vendor\slim\twig-view\src\Twig.php(180): Slim\Views\Twig->fetch('auth/login.twig', Array)
So the method Twig->fetch()
gets called (entry 15) and in line 124 (entry 14) which is therefore part of that method, Environment->render()
gets called. But looking at the source of the current 3.x branch, the method Twig->fetch()
is defined on lines 142-147.
https://github.com/slimphp/Twig-View/blob/3955c519658730cc45865b71e0ad876c6d1758f2/src/Twig.php#L142-L147
Maybe you should update your Twig-View installation.
I’m using slim-twig 3.0.0-beta and l did try 3.x-dev same error.
I guess the Twig
instance gets overriden somewhere in the code. If you refer to your repo slim-skleton
, then I just quickly checked and found, that the registered function for the view
key in \App\Providers\TwigServiceProvider::register
gets called two times. Therefore you would get a new instance for every call.
I changed the code to the following
/**
* @return void
* @throws \Twig\Error\LoaderError
*/
public function register(): void
{
$twig = Twig::create(Config::get('twig.path'), (array)Config::get('twig.settings'));
foreach ((array)Config::get('twig.functions') as $function) {
$twig->getEnvironment()->addFunction($function);
}
$this->getContainer()->add('view', $twig);
}
and it found the special Slim Twig functions.
But I am not sure if this is the way to go - never used the league container.
I guess the
Twig
instance gets overriden somewhere in the code. If you refer to your reposlim-skleton
, then I just quickly checked and found, that the registered function for theview
key in\App\Providers\TwigServiceProvider::register
gets called two times. Therefore you would get a new instance for every call.
thank you @adriansuter to mention twig isn't singleton, I did make singleton add true in the third parameter on the method add.
$this->add(parameter, parameter, true);
now work fine, thanks for the help.
I guess the
Twig
instance gets overriden somewhere in the code. If you refer to your reposlim-skleton
, then I just quickly checked and found, that the registered function for theview
key in\App\Providers\TwigServiceProvider::register
gets called two times. Therefore you would get a new instance for every call.thank you @adriansuter to mention twig isn't singleton, I did make singleton add true in the third parameter on the method add.
$this->add(parameter, parameter, true);
now work fine, thanks for the help.
Hello, @kaxias Could you explain to me how you solved it, I have the same problem.
Where are you added that line of code? $this->add(parameter, parameter, true);
my composer.json
"slim/psr7": "^1.1",
"slim/slim": "^4.5",
"slim/twig-view": "^3.1"
my repositories.php:
Twig::class => function (ContainerInterface $container) {
$twigSettings = $container->get('settings')['twig'];
$options = $twigSettings['options'];
$options['cache'] = $options['cache_enabled'] ? $options['cache_path'] : false;
$twig = Twig::create($twigSettings['paths'], $options);
// Add extension here
$twig->addExtension(new DebugExtension());
$twig->getEnvironment()->addGlobal('session', $_SESSION);
return $twig;
},
TwigMiddleware::class => function (ContainerInterface $container) {
return TwigMiddleware::createFromContainer($container->get(App::class), Twig::class);
},
Add on Container
Add Middleware
Error Log