2

在 codeigniter 4 中,我尝试使用 ; 打印视图中的会话变量$session->get('item');还有$session->item,但不幸的是它不打印。但是使用$_SESSION全局变量打印相同的变量。任何人都可以指导如何在视图中使用$session->get('item');或$session->item

会话变量通过两种方法在控制器中打印$session->get('item');和$session->item

4

1 回答 1

4

这是一个有趣的话题。

这是我用来测试的一些代码...

我劫持了默认的 Home Controller app/Controllers/Home.php

protected $session;
public function index()
{
    $this->session = \Config\Services::session();
    $this->session->set('view_data','Hi there I am from the session');

    $page['view_data'] =$this->session->get('view_data'); // Normal way
    $page['session'] =$this->session;                     // Pass in the object

    echo view('test_session_view',$page);

}

然后我创建了一个小测试文件来看看什么会起作用......

应用程序/视图/test_session_view.php

<?php
    $local_session = \Config\Services::session(); // Needed for Point 5
?>
<h1>Test_Session_View.php</h1>
<h2>1. Passed in as normal view variable : <?= $view_data; ?></h2>
<h2>2. Passed in as the Session Object : <?= $session->get('view_data'); ?></h2>
<h2>3. The Ole Fashioned SESSION Global way: <?= $_SESSION['view_data']; ?></h2>
<h2>4. The Helper Way: <?= session('view_data'); ?></h2>
<h2>5. The local instance: <?= $local_session->get('view_data'); ?></h2>

默认情况下,$session(在我的例子中是 $this->session)不是“全局的”,因此它必须遵守与传递给视图的任何其他变量相同的规则。

当然,正如您所指出的,$_SESSION 是可以直接访问的,因为它是 GLOBAL。

如您所见,会话助手(第 4 点)为我们提供了更简单的访问。

这导致了第 5 点,这是会话助手所做的。它创建会话实例并执行“获取”。那是在System\Common.php 第 877 行ish函数 session(string $val = null)

因此,有几种方法可以访问视图中的会话数据。

于 2020-04-15T04:34:52.747 回答