Variáveis ​​globais Silex

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 fooantes 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 $appvariá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 }}.