我们如何在刀片集成视图中显示CodeIgniter会话flash消息

时间:2017-04-09 14:56:01

标签: php codeigniter session-variables laravel-blade

我用过 {{$ this-> session-> flashdata(' message')}}在视图中说test.blade.php 在控制器中设置会话闪存数据后 但重定向结果时

遇到PHP错误

严重性:错误

消息:在null

上调用成员函数flashdata()

3 个答案:

答案 0 :(得分:1)

由于您使用的是刀片模板引擎,因此无法在视图中打印Flash数据,因为在使用balde时,您的视图文件会在某个位置呈现为单独的文件(例如:缓存/或等)。所以这次$this不适用于其他位置的渲染视图...所以如果您需要打印闪存数据,请尝试以下

@php
  $CI = &get_instance();
  echo $CI->session->flashdata("message");
@endphp

您还可以使用本机php变量$_SESSION,它是一个包含可用会话变量的关联数组

@php
   echo $_SESSION['message'];
@endphp

答案 1 :(得分:0)

尝试自动加载codeigniter会话库

应用程序> config> autoload.php

$autoload['libraries'] = array('session');

https://www.codeigniter.com/user_guide/libraries/sessions.html

设置配置会话,例如文件夹权限0700

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 1440;
$config['sess_save_path'] = APPPATH . 'cache/session/';
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = TRUE;

答案 2 :(得分:0)

您不能将flashdata与刀片库一起使用,因为刀片库找不到$ this。尝试下面的代码,让我知道它是否有效。

1)创建一个新模型“flashdata_model.php”

<?php
class Flashdata_model extends CI_Model {

    // setter
    public function set($key, $msg){
        $_SESSION['flashdata']['_viewcount'] = 0;
        $_SESSION['flashdata'][$key] = $msg;
    }

    // getter (though we cant use this method in CI view)
    public function get($key){
        return $_SESSION['flashdata'][$key];
    }

    // clean
    public function clear(){
        // This will clear flashdata variable after using once 
        if($_SESSION['flashdata']['_viewcount'] == 1){
            unset($_SESSION['flashdata']);
        }
        else 
            $_SESSION['flashdata']['_viewcount'] = 1;

    }
}

2)每当你想在构造函数中的任何控制器调用clear方法中使用它来清除以前的flash消息。

class Login extends CI_Controller { 
  function __construct(){
    parent::__construct();
    // This will clear previous flash messages
    $this->flashdata_model->clear();
  }
}

3)设置flash消息使用

$this->flashdata_model->set("error", "Invalid username orpassword");

4)打印Flash消息

<?php 
  if(isset($_SESSION["flashdata"]['error']))
    echo $_SESSION["flashdata"]['error'];

  if(isset($_SESSION["flashdata"]['msg']))
    echo $_SESSION["flashdata"]['msg'];
?>