4

silex アプリケーションで Twig を使用しています。事前リクエスト フックで、ユーザーがログインしているかどうか、ユーザー オブジェクトが Twig に追加されているかどうかを確認したい (メニューでログイン/ログアウト状態をレンダリングできるようにするため)。

ただし、ソース コードを見ると、render メソッドの引数としてテンプレート ビュー変数を指定することしかできないようです。ここで何か不足していますか?

これがまさに私が達成したいことです:

// Code run on every request    

$app->before(function (Request $request) use ($app)
{
    // Check if the user is logged in and if they are
    // Add the user object to the view

    $status = $app['userService']->isUserLoggedIn();

    if($status)
    {
        $user = $app['userService']->getLoggedInUser();

        //@todo - find a way to add this object to the view 
        // without rendering it straight away
    }

});
4

4 に答える 4

18
$app["twig"]->addGlobal("user", $user);
于 2012-04-11T19:04:54.350 に答える
16

Maerlynが言ったことに加えて、あなたはこれを行うことができます:

$app['user'] = $user;

そして、テンプレートで使用する:

{{ app.user }}
于 2012-04-15T11:10:06.763 に答える
1

twig->offsetSet(key, value)値を事前にレンダリングするために使用できます

小枝ヘルパー登録時の例

$container['view'] = function ($c) {
    $view = new \Slim\Views\Twig('.templatePath/');

    // Instantiate and add Slim specific extension
    $basePath = rtrim(str_ireplace('index.php', '', $c['request']->getUri()->getBasePath()), '/');
    $view->addExtension(new Slim\Views\TwigExtension($c['router'], $basePath));

    //array for pre render variables
    $yourPreRenderedVariables = array(
       'HEADER_TITLE' => 'Your site title',
       'USER'  => 'JOHN DOE'
    );
    //this will work for all routes / templates you don't have to define again
    foreach($yourPreRenderedVariables as $key => $value){
        $view->offsetSet($key, $value);
    }

    return $view; 
};

このようなテンプレートで使用できます

<title>{{ HEADER_TITLE }}</title>
hello {{ USER }},
于 2016-04-27T19:29:41.457 に答える