Laravel输入验证无效(Flash消息)

时间:2019-01-04 16:45:54

标签: php laravel redis

我使用的是最新版本的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中的类元数据丢失了,是否有解决方法?

0 个答案:

没有答案