CodeIgniter如何在twig模板中访问会话变量

时间:2014-04-25 07:06:03

标签: php codeigniter session variables twig

有人可以帮我。我是CodeIgniter和Twig的新手。我在我的控制器中声明了以下内容:

$datasession = array(
'nick' => $sess_nick,
'login_ok' => true
);

$this->session->set_userdata($datasession);

redirect('app'); //app is a controller that render the template view.

然后,问题是:如何从树枝模板中获取这些变量?我尝试使用:

{{ session.userdata.nick }}

但它显示为空字符串。

先谢谢。

4 个答案:

答案 0 :(得分:0)

要在树枝模板上添加会话变量,您必须在Twig库或控制器中添加以下行。

$datasession = array(
    'nick' => $sess_nick,
    'login_ok' => true
);
$this->session->set_userdata($datasession);
$this->_twig->addGlobal("session", $this->CI->session);

然后在您的树枝模板上,您可以像这样打印会话

{{ session.userdata.nick }}

由于在CodeIgniter中,用户存储的会话通常位于userdata数组中。否则,您只需调用会话变量并命名

即可
{{ session.nick }}

Src:http://llanalewis.blogspot.co.uk/2013/08/codeigniter-add-session-in-twig.html

答案 1 :(得分:0)

好的,感谢Latheesan Kanes的帮助。这对你的指导非常有帮助。我想分享一下我解决这个问题的方法。

正如Latheesan所说,我们必须使用addGlobal()方法(我在我的Twig库文件夹中添加了这个方法)

如下:

$this->_twig->addGlobal("session", $this->CI->session);

但是在加载Session库之前不要忘记。这样。

$this->CI->load->library('session');

通过这种方式,您可以在所有树枝视图中全局使用会话。

答案 2 :(得分:0)

我正在使用CodeIgniter 3RC3和Twig-Codeigniter library(感谢Erik& Bennet!)。

为了在twig中启用简单的会话访问,我在/application/libraries/Twig.php文件中添加了一行__construct()方法:

public function __construct()
{
    $this->_ci = & get_instance();
    $this->_ci->config->load(self::TWIG_CONFIG_FILE); // load config file

    // set include path for twig
    ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . APPPATH . 'third_party/Twig/lib/Twig');
    require_once (string)'Autoloader.php';

    // register autoloader
    Twig_Autoloader::register();
    log_message('debug', 'twig autoloader loaded');

    // init paths
    $this->template_dir = $this->_ci->config->item('template_dir');
    $this->cache_dir = $this->_ci->config->item('cache_dir');

    // load environment
    $loader = new Twig_Loader_Filesystem($this->template_dir, $this->cache_dir);
    $this->_twig_env = new Twig_Environment($loader, array(
                                            'cache' => $this->cache_dir,
                                            'auto_reload' => TRUE));

    // ADD SESSION TO TWIG - JZ
    $this->_twig_env->addGlobal('session', $this->_ci->session);
    // SESSION IS NOW AVAILABLE IN TWIG TEMPLATES!

    $this->ci_function_init();

}

现在我们将会话加载到我们的twig实例中,我们在twig模板中访问会话变量(例如CI userdata),如下所示:

<span>__ci_last_regenerate: {{ session.userdata.__ci_last_regenerate }}</span>

答案 3 :(得分:0)

我使用以下代码在Twig中成功使用了会话变量:

在控制器中:

$datasession = array(
    'language' => "PHP",
    'framework' => "CodeIgniter"
);

$this->session->set_userdata($datasession);
$this->twig->addGlobal("session", $this->session);

在模板中:

{{ session.language }} 
{{ session.framework }} 

我正在使用https://github.com/kenjis/codeigniter-ss-twig

相关问题