我使用的是最新版本的Laravel(5.7),我的问题是表单验证,errorBag始终为空,其余的都可以正常工作,会话甚至Flash数据都可以,但是在验证表单时,errorBag是总是空的。
我试图在SESSION_DRIVER中使用文件驱动程序,并且可以使用,但是使用我的自定义驱动程序将无法使用。
我创建了一个自定义的Redis驱动程序,我需要一个自定义的驱动程序,因为我想将数据存储在Redis中作为json,而不是php序列化,因为稍后在nodejs服务器中,我检查数据并使用json比解析更容易nodejs中的php序列化数据。
这是我编写的自定义驱动程序:
<?php
/**
* Created by PhpStorm.
* User: jordi
* Date: 19/12/18
* Time: 20:49
*/
namespace App\Extensions\Sessions;
use Illuminate\Support\Facades\Redis;
class JsonSessionHandler implements \SessionHandlerInterface
{
public function close()
{
// TODO: Implement close() method.
return true;
}
public function destroy($session_id)
{
$key = 'laravel_cache:'.$session_id;
Redis::del($key);
return true;
}
public function gc($maxlifetime)
{
return true;
}
public function open($save_path, $name)
{
return true;
}
/*
* {@inheritdoc}
*/
public function write($sessionId, $data)
{
$key = 'laravel_cache:'.$sessionId;
$jsonData = json_encode(unserialize($data));
$expireTime = env('SESSION_LIFETIME', 120) * 60;
Redis::set($key, $jsonData, 'EX', $expireTime);
return true;
}
/*
* {@inheritdoc}
*/
public function read($sessionId)
{
$key = 'laravel_cache:'.$sessionId;
$sessionData = serialize(json_decode(Redis::get($key), true));
return $sessionData;
}
}
一切正常,会话,刷新数据,但是当我需要使用Laravel中的内置验证系统来验证表单时,它不起作用,因为我说过使用FileDriver进行会话,它可以正常工作,所以我猜问题出在我的自定义redis驱动程序上。
注意1: 经过一番测试后,我发现问题出在序列化和json_encoding上,我想某些数据可能会丢失,也许是因为JSON中的类元数据丢失了,是否有解决方法?