【问题标题】:CodeIgniter 4 - How to display Flashdata inside a View?CodeIgniter 4 - 如何在视图中显示 Flashdata?
【发布时间】:2021-01-10 17:07:17
【问题描述】:

我正在将我的项目从 CodeIgniter 3 升级到 CodeIgniter 4, 我正在尝试在视图中显示 flashdata 消息,但不幸的是,我尝试的每种方法都会出现不同的错误。

在 CodeIgniter 3 中,我曾经这样称呼:

<?php if ($this->session->flashdata('message')) : ?>
    <div class="alert alert-success alert-dismissible fade show" role="alert">
        <?php echo $this->session->flashdata('message'); ?>
        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    </div>
<?php endif; ?>

我在 CodeIgniter 4 中尝试了同样的方法,但我得到了这个错误:

ErrorException
Undefined property: CodeIgniter\View\View::$session

谁能告诉我如何做到这一点? 提前致谢。

【问题讨论】:

标签: php codeigniter codeigniter-4


【解决方案1】:

上下文 ($this) 是 View 类的一个实例 --> 你不能直接访问 Session 实例

您可以在下面创建新实例

$session = \Config\Services::session();

【讨论】:

  • 我在 Controller 中完成了 setFlashdata ($session-&gt;setFlashdata('item', 'value');) 现在我正在寻找从视图中显示存储到 Flashdata 中的数据的方法。
  • 你可以从 $data = $session->flashdata("key")
  • 如果你解决了也请标记为答案,谢谢
【解决方案2】:

我只是用另一种方式显示flashdata,效果很好。

在我的控制器中,我为传递给视图的数据添加了一个新索引:

$data['message'] = "Sorry, you must login first";
return view('login', $data);

然后在视图login.php我这样称呼它:

<?php if (isset($message)) : ?>
    <div class="alert alert-warning alert-dismissible fade show" role="alert">
        <?php echo $message; ?>
        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    </div>
<?php endif; ?>

更新:

我只是使用markAsFlashdata() 方法,它工作得很好。这是我在 return 方法之前在控制器中所做的:

$_SESSION['error'] = 'Sorry, you must login first';
$session = session();
$session->markAsFlashdata('error');

然后在视图中我使用$_SESSION['error'] 访问flashdata:

<?php if (isset($_SESSION['error'])): ?>
    <div class="alert alert-warning" role="alert">
        <?= $_SESSION['error']; ?>
    </div>
<?php endif;?>

【讨论】:

    【解决方案3】:

    在 CodeIgniter 4 中设置 Flash 数据$session-&gt;setFlashdata('item', 'value'); 和查看$session-&gt;getFlashdata('item'); 的新方法

    您可以在这里查看:Set Flash data in session in CodeIgniter

    【讨论】:

      【解决方案4】:

      echo $this-&gt;section('content');之后添加这一行

      $session = \Config\Services::session(); 
      
      <?php if (isset($message)) : ?>
          <div class="alert alert-warning alert-dismissible fade show" role="alert">
              <?php echo $message; ?>
              <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
          </div>
      <?php endif; ?>
      

      【讨论】:

        【解决方案5】:

        你可以直接使用 session() 函数:

        <?php if (session()->getFlashdata('message') !== NULL) : ?>
            <div class="alert alert-success alert-dismissible fade show" role="alert">
                <?php echo session()->getFlashdata('message'); ?>
                <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            </div>
        <?php endif; ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-13
          • 2013-10-02
          • 1970-01-01
          • 1970-01-01
          • 2020-03-02
          • 1970-01-01
          相关资源
          最近更新 更多