我无法让它工作,我需要通过Session对象内的对象检索CSRF令牌,但无论我尝试什么,它都不会显示。
我开发了一个系统,它将根据对象的属性生成模板,如下所示:
public function render(){
if(method_exists($this->controller, $this->action)){
//We need to check if the method is used in the controller and not in the parents AppController and/or Controller
$f = new ReflectionClass($this->controller);
$methods = array();
foreach($f->getMethods() as $m){
if($m->name == $this->action){
if($m->class == $this->controller){
$this->controller->{$this->action}();
}
}
}
$this->view_body = $this->render_view();
}else{
$this->error->show('Method ' . $this->action . ' not found in ' . $this->controller, $this->action, $this->controller);
}
$this->_set_render_view();
$this->_set_controller_layout();
if(!file_exists($this->config->paths->root . $this->layouts_path."/".$this->controller->layout)){
$this->error->show('Layout not found', $this->action, $this->controller);
}
if(!file_exists($this->config->paths->root . $this->views_path.'/'. $this->view_root . "/" . $this->controller->view)){
$this->error->show('View not found', $this->action, $this->controller);
}
$layout_content = file_get_contents($this->config->paths->root . $this->layouts_path."/".$this->controller->layout);
$view_content = file_get_contents($this->config->paths->root . $this->views_path.'/'. $this->view_root . "/" . $this->controller->view);
$bind_content = "{% extends \"layout.tmpl\" %} ";
$templates = array();
$bind_content .= '{% block view %}' . $view_content . " {% endblock %}";
$templates['layout.tmpl'] = $layout_content;
foreach($this->controller->snippets as $snippet_name => $snippet){
if(!file_exists($this->config->paths->root.$this->snippets_path ."/" . $snippet)){
$this->error->show('Snippet not found', $this->action, $this->controller);
}
$snippet_content = file_get_contents($this->config->paths->root.$this->snippets_path ."/" . $snippet);
$bind_content .= "{% block ". $snippet_name . " %}" . $snippet_content . " {% endblock %}";
}
$templates[$this->controller->view] = $bind_content;
$loader = new Twig_Loader_Array($templates);
$processwire_vars = array('user', 'pages', 'page', 'sanitizer', 'files', 'input', 'permissions', 'roles', 'templates', 'session', 'config', 'controller', 'wire');
foreach($this->controller->vars as $key=>$val){
$vars[$key] = $val;
}
$twig = new Twig_Environment($loader);
$twig->addGlobal('this', $this);
foreach($processwire_vars as $key => $pw_v){
if(!isset($vars[$pw_v])){
//$vars[$pw_v] = $this->$pw_v;
$twig->addGlobal($pw_v, $pw_v);
}
}
echo $twig->render($this->controller->view, $vars);
}
现在我认为我可以通过以下方式访问会话的属性:
{{ session.CSRF.getTokenValue() }}
或
{{ session['CSRF'].getTokenValue() }}
但没有任何东西在显示。
当我使用<?php echo $session->CSRF->getTokenValue(); ?>
它有效时,所以它不是失败的对象/方法,
我在这里做错了什么?
编辑:
值得注意的是,访问user(user.title,user.name)等属性是可能的