RN *_*aha 1 session fat-free-framework
我写了一个示例crud应用程序,并希望显示一些消息,如果成功或发生错误.但是当我尝试设置会话消息时,重定向后它不会显示在页面上.它也不存在于$ _SESSION中.
这是我在UsersController中的代码
public function index(){
$user = new User($this->db);
$this->f3->set('users',$user->all());
$this->f3->set('page_head','User List');
//get session
new Session();
$sess= $this->f3->get('SESSION.test');
//set it to use in view file
$this->f3->set('message', $sess);
$this->f3->set('view','users/list.htm');
}
public function create(){
if($this->f3->exists('POST.create')){
$user = new User($this->db);
$user->add();
//set session
new Session();
$this->f3->set('SESSION.test',"Success");
$this->f3->reroute('/users');
} else{
$this->f3->set('page_head','Create User');
$this->f3->set('view','users/create.htm');
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的视图文件.
<check if="{{ @message }}">
<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>{{ @message }}</strong>
</div>
Run Code Online (Sandbox Code Playgroud)
它不起作用.这有什么问题?代码取自无脂肪框架
编辑:正如xfra35建议的那样
好的,我用的时候
$f3->set('SESSION.test','Success');
并删除了对
新会话();
这工作正常,但如何直接在布局文件中使用它而不是在控制器中设置消息变量将其传递给布局文件?我的意思是我应该删除这些行
$ sess = $ this-> f3-> get('SESSION.test'); $ this-> f3-> set('message',$ sess);
并可以直接在视图文件中使用此会话消息.我需要像这样设置会话消息
$ _SESSION [ 'MSG'] [ '成功'] = "更新";
或$ _SESSION ['msg'] ['error'] ="错误";
我需要遍历会话消息并查看其错误消息或成功消息.有没有办法让会话变量一旦显示就变成空白?
您正在使用的Session类是基于缓存的会话处理程序.
如果在您的服务器上找不到内存缓存后端(APC,Memcache,Redis,XCache等...),框架将使用自己的基于文件系统的缓存系统.在这种情况下,文件存储在一个名为子文件夹cache/里面TEMP的文件夹.(有关F3缓存引擎的更多详细信息,请参见此处)
所以回答你的问题:TEMP文件夹有可能无法写入.
无论如何,如果你不明确需要在缓存中存储会话,只需删除对Session类的调用并继续使用$f3->set('SESSION.test'):session将通过PHP存储在文件系统上(经典行为).
以下是在F3中存储会话的各种方法:
默认PHP会话(文件系统):
$f3->set('SESSION.test','Success');
Run Code Online (Sandbox Code Playgroud)
缓存存储:
new Session();
$f3->set('SESSION.test','Success');
Run Code Online (Sandbox Code Playgroud)
SQL存储:
$db=new DB\SQL($dsn,$user,$pw);
new DB\SQL\Session($db);
$f3->set('SESSION.test','Success');
Run Code Online (Sandbox Code Playgroud)
MongoDB存储:
$db=new DB\Mongo($dsn,$dbname);
new DB\Mongo\Session($db);
$f3->set('SESSION.test','Success');
Run Code Online (Sandbox Code Playgroud)
JigDB存储:
$db=new DB\Jig($dir);
new DB\Jig\Session($db);
$f3->set('SESSION.test','Success');
Run Code Online (Sandbox Code Playgroud)