2016-10-23 2 views
1

Symfonyでは、どのビューでも{{ app.user.username }}を使用していました。スリムでこういうことをすることはできますか?Slim 3.5でTwigのグローバル変数を追加するにはどうしたらいいですか?

現在、$container['user']にユーザーを追加しており、すべてのビューにview->render($response, 'index.html.twig', ['user' => $this->user])という名前を付けています。

つまり、userをTwigのグローバル変数として追加できますか?私は多くの同様の質問を見ましたが、私が使用できた解決策はありませんでした。

+0

私はあなたがユーザーオブジェクトの代わりに現在のユーザーを受け取るクラスを追加すべきだと思います。要求中にユーザーデータが変更される可能性があります。 – malcolm

答えて

4

$container['view']->addGlobal('user', $this->user);

+0

これは行く方法です –

+0

symfonyを使用しない場合は、 '$ container ['view'] - > getEnvironment() - > addGlobal( 'base'、 'xxx');' – user1032531

0

(私は小枝を登録した後)私はこれがうまく機能し、これが私の依存関係に次の行を追加することで動作するように

$container['view']['user'] = $_SESSION['user']; 

を得ました。私は{{ user.username }}でユーザー名を取得できます。私はセッションをこのようにするのがどれくらい安全であるかという手がかりは持っていませんが、それはうまくいきます。

0

Iは、{{CURRENT_PATH}}は変数でパスを露出させるためにこれを使用する:

$container = $app->getContainer(); 
$container["view"] = function ($container) use ($menu) { 
    $view = new \Slim\Views\Twig("../templates"); 
    $basePath = rtrim(str_ireplace("index.php", "", $container["request"]->getUri()->getBasePath()), "/"); 
    $view->addExtension(new Slim\Views\TwigExtension($container["router"], $basePath)); 
    $view->getEnvironment()->addGlobal("current_path", $container["request"]->getUri()->getPath()); 
    return $view; 
}; 

これはTemplatesドキュメントに記載されたアプローチに従います。

関連する問題