当我想使用slim micro Framework在twig模板中获取$_SESSION['session'];
时,我遇到了问题。
这是我的代码:
<!DOCTYPE html>
<html>
<head>
<title>{{ title }} </title>
</head>
<body>
<p> welcome <?php echo $_SESSION['username']; ?>
<p> {{ body }} </p>
<a href="http://localhost/slim/public_html/logout">logout</a>
</body>
</html>
我无法使用该代码获取会话用户名。
有关如何将会话传递给twig模板的任何建议吗?
答案 0 :(得分:11)
您应该将会话注册为twig global,因此可以在模板中访问它。
//$twig is a \Twig_Environment instance
$twig->addGlobal("session", $_SESSION);
在你的模板中:
{{ session.username }}
答案 1 :(得分:3)
我也使用Slim和Twig。我的班级:
class twigView extends Slim_View {
public function render( $template) {
$loader = new Twig_Loader_Filesystem($this->getTemplatesDirectory());
$twig = new Twig_Environment($loader);
$twig->addGlobal("session", $_SESSION);
return $twig->render($template, $this->data);
}
}
如您所见,我已添加addGlobals
。现在它可以正常工作,我可以使用{{session.user_id}}
等等。
我的index.php的一部分:
require './lib/twigView_class.php';
require_once './lib/Twig/Autoloader.php';
require './lib/Paris/idiorm.php';
require './lib/Paris/paris.php';
Twig_Autoloader::register();
我希望它会对你有所帮助。
但使用全球&#39;是否安全?在Twig?
答案 2 :(得分:3)
这是我用Slim Framework ver3
实现的$container['view'] = function ($container) {
...
$view = new Twig($settings['view']['template_path'], $settings['view']['twig']);
$view->getEnvironment()->addGlobal('session', $_SESSION);
...
return $view;
};
然后在Twig模板中访问会话,如
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<img src="#" class="img-circle"> {{ session.username }}<b class="caret"></b>
</a>
&#13;
答案 3 :(得分:2)
在php文件中:
$app->get('/your_route_here', function() use ($app) {
$app->render('view_for_route.twig', array('session_username' => $_SESSION['username']) );});
在twig文件中:
<p> welcome {{ session_username }} </p>
您应该通过关联数组将PHP文件中的值传递给Twig。