我们如何在 blade 集成视图中显示 CodeIgniter session 闪现消息
How we can display CodeIgniter session flash message in blade integrated view
我用过
{{$this->session->flashdata('message')}} 在视图中说 test.blade.php
在控制器中设置 session 闪存数据后
但在重定向时结果
遇到了一个PHP错误
严重性:错误
消息:在 null 时调用成员函数 flashdata()
尝试自动加载 codeigniter 会话库
应用程序 > 配置 > 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;
您不能将 flashdata 与 blade 库一起使用,因为 blade 库找不到 $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
方法来清除之前的闪现消息。
class Login extends CI_Controller {
function __construct(){
parent::__construct();
// This will clear previous flash messages
$this->flashdata_model->clear();
}
}
3) 要设置即显消息,请使用
$this->flashdata_model->set("error", "Invalid username orpassword");
4) 打印即显消息
<?php
if(isset($_SESSION["flashdata"]['error']))
echo $_SESSION["flashdata"]['error'];
if(isset($_SESSION["flashdata"]['msg']))
echo $_SESSION["flashdata"]['msg'];
?>
由于您使用的是 blade 模板引擎,因此您无法在视图中打印闪存数据,因为当您使用 balde 时,您的视图文件会在某个位置呈现为单独的文件(例如:缓存/ 或其他)..所以这次 $this
将无法在另一个位置的渲染视图上工作...所以如果您需要打印闪存数据,请尝试下面的
@php
$CI = &get_instance();
echo $CI->session->flashdata("message");
@endphp
或者也可以使用原生php变量$_SESSION
,这是一个包含session个可用变量的关联数组
@php
echo $_SESSION['message'];
@endphp
我用过
{{$this->session->flashdata('message')}} 在视图中说 test.blade.php
在控制器中设置 session 闪存数据后
但在重定向时结果
遇到了一个PHP错误
严重性:错误
消息:在 null 时调用成员函数 flashdata()
尝试自动加载 codeigniter 会话库
应用程序 > 配置 > 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;
您不能将 flashdata 与 blade 库一起使用,因为 blade 库找不到 $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
方法来清除之前的闪现消息。
class Login extends CI_Controller {
function __construct(){
parent::__construct();
// This will clear previous flash messages
$this->flashdata_model->clear();
}
}
3) 要设置即显消息,请使用
$this->flashdata_model->set("error", "Invalid username orpassword");
4) 打印即显消息
<?php
if(isset($_SESSION["flashdata"]['error']))
echo $_SESSION["flashdata"]['error'];
if(isset($_SESSION["flashdata"]['msg']))
echo $_SESSION["flashdata"]['msg'];
?>
由于您使用的是 blade 模板引擎,因此您无法在视图中打印闪存数据,因为当您使用 balde 时,您的视图文件会在某个位置呈现为单独的文件(例如:缓存/ 或其他)..所以这次 $this
将无法在另一个位置的渲染视图上工作...所以如果您需要打印闪存数据,请尝试下面的
@php
$CI = &get_instance();
echo $CI->session->flashdata("message");
@endphp
或者也可以使用原生php变量$_SESSION
,这是一个包含session个可用变量的关联数组
@php
echo $_SESSION['message'];
@endphp