Ao trabalhar com um aplicativo Silex , passei por algumas vezes em que preciso que um valor persista no aplicativo e no modelo da página e, em meu aprendizado, encontrei algumas maneiras de fazer isso.
Twig Globals
Se estiver usando o provedor de modelo Twig para renderizar páginas, você pode usar uma variável global:
$app->register(new SilexProviderTwigServiceProvider(), array(
'twig.path' => __DIR__.'/views',
));
$app['twig']->addGlobal('foo', $bar);
Isso define a variável do modelo {{ foo }}
no momento em que o addGlobal()
método é chamado. Você pode substituir o global chamando o addGlobal()
método novamente, mas isso pode se tornar muito tedioso se houver muitas variáveis para definir. E se você precisar acessar foo
antes do modelo (em algum outro lugar na lógica do controlador), não é possível obter acesso a ele depois de definido.
Recipiente de aplicação Silex
O aplicativo Silex permite armazenar valores arbitrários e, em seguida, recuperá-los, mas você precisa se lembrar de repassá-los ao modelo:
$app['foo'] = $bar;
echo $app['foo'];
return $app['twig']->render('mypage.twig', array('foo' => $app['foo']));
<strong> FALSO! </strong> Essa é a abordagem errada e a armadilha em que caí da primeira vez, e criei várias maneiras de não esquecer de passar a variável para o modelo. O método adequado é perceber que a $app
variável já foi passada para o modelo, junto com seus atributos personalizados. Assim, uma vez configurado $app['foo']
no Controller (PHP), no arquivo View (Twig), você só precisa chamar {{ app.foo }}
.