无法访问 Kohana 控制器中的会话变量

Posted

技术标签:

【中文标题】无法访问 Kohana 控制器中的会话变量【英文标题】:Can't access session variable in Kohana controller 【发布时间】:2015-06-10 18:52:21 【问题描述】:

我对 kohana 框架有一个神秘的问题。

我在控制器函数中创建会话变量:

public function action_authorise()
    
        session_start();
        $_SESSION["user"] = "superAdmin";
    

稍后在同一个控制器的另一个功能中我尝试访问本赛季:

public function action_getSession()
    
        $this->template->test = $_SESSION["user"];
        $this->template->content = View::factory('admin/main');
    

问题是,当我在 admin/main 视图中调用 $test 变量时,它返回空字符串,但如果我在 admin/main 视图中隐式调用 $_SESSION["user"],它会返回“superAdmin”。

在控制器中调用会话变量时,任何人都可以看到错误吗?谢谢

【问题讨论】:

【参考方案1】:

这里的问题是您将变量 test 传递给视图 template,并且它需要传递给视图 admin/main。您可以通过多种方式做到这一点,选择您最喜欢的一种:

// Create the view object
$partial_view = View::factory('admin/main');
// Assign the session value to the partial view's scope as `test`
$partial_view->test = $_SESSION["user"];
// Assign the partial view to the main template's scope as `content`
$this->template->content = $partial_view;

快捷语法:

$this->template->content = View::factory('admin/main', array(
    'test' => $_SESSION['user'],
));

【讨论】:

【参考方案2】:

您将test 变量传递给template 视图,但试图访问它admin/main 视图。 admin/main 视图中没有 test 变量。这些是不同的看法。每个都有自己的变量。

您应该将test 设置为admin/main 视图,如:

public function action_getSession()
    
        $this->template->content = View::factory('admin/main')
            ->set('test', $_SESSION["user"]);
    

在 Kohana 中还有非常有用的 Session 类。它负责框架内的会话业务。

看看user guide。

【讨论】:

以上是关于无法访问 Kohana 控制器中的会话变量的主要内容,如果未能解决你的问题,请参考以下文章

没有登录会话,任何人都无法访问 codeigniter 4 中的控制器

在子目录中无法访问会话变量

无法从控制器 laravel 访问视图中的变量

如何访问控制器中的会话变量

如何将一个控制器中的会话变量访问到 SpringMVC 中的另一个控制器?

AngularJS:ui-router解析后无法访问控制器中的变量