繁体   English   中英

Laravel雄辩的数据库验证器在Slim 3中不起作用

[英]Laravel Eloquent Database Validators Not Working In Slim 3

我正在Slim 3中进行开发。我决定将Eloquent用作ORM,并希望在中间件中使用Illuminate验证器来验证控制器中的信息。

不需要使用数据库进行验证的验证规则就可以很好地工作,但是我在使用数据库验证器时遇到了麻烦。

我没有收到任何错误,只是在应有的时候没有通过。

据我了解,我应该创建验证器工厂,然后调用make函数。 例:

$v = $this->validatorFactory
       ->make($toCheck, $this->rules[$route], $this->messages);

if ($v->fails()) {....}

由于它适用于所有不需要数据库的路由,因此在此不再赘述。 我认为问题在于如何将PressenceValidator添加到我的工厂。

我是这样的

private function initiateValidatorFactory($dbConnectionSettings)
{
    $validatorFactory = new ValidatorFactory(
        new Translator(new FileLoader(new Filesystem(), "en"), "en"),
        null);

    $sqlConfig = $dbConnectionSettings['mysql'];

    $dsn = 'mysql:host=' . $sqlConfig['host'] . ';port=' . $sqlConfig['port'] . ';dbname=' . $sqlConfig['database'];
    $connection = new Connection(
        new \PDO($dsn, $sqlConfig['username'], $sqlConfig['password']),
        $sqlConfig['database'],
        $sqlConfig['prefix']
    );
//        var_dump($connection->select('SELECT * FROM platform;'));
//        die();

    $resolver = new ConnectionResolver(['mysql' =>  $connection]);

//        var_dump($resolver->hasConnection('mysql'));
//        die();

//        var_dump($resolver->connection('mysql'));
//        die();

    $verifier = new DatabasePresenceVerifier($resolver);
//        $verifier->setConnection('mysql');

    $validatorFactory->setPresenceVerifier($verifier);

    $this->validatorFactory = $validatorFactory;
}

我想指出的是,此原始SQL查询已被注释掉。 这就是为什么我认为Connection类没有问题的原因。

请注意,我是如何创建几乎是虚拟的FileLoader的,但是我认为我的用例不需要它(或者我不确定)。

所有注释掉的支票看起来都还可以。

我尝试谷歌搜索,发现人们提到了一些有关“启动雄辩”的问题。 我试图在代码中找到可以做的地方,但没有成功。

最后我缺少的是如何编写规则。 规则示例如下:

'platformid' => 'exists:mysql.platform,platformid'

PS不问为什么我们在表“ platform” =)中有列“ platformid”。

我正在使用光照/验证5.5和光照/数据库5.5。

感谢您的宝贵时间以及您可以提前提供的任何帮助。

我以某种方式弄清楚了。 它很hacky,但我想我现在可以接受。 我不太了解这种方法为何有效,但确实可行。

所以我有这样的数据库服务提供者:

$capsule = new Manager();

    ////////CONFIGURE MYSQL\\\\\\\
    $sqlConfig = $pimple['settings']['db']['mysql'];
    $capsule->addConnection([
        'driver'    => $sqlConfig['driver'],
        'host'      => $sqlConfig['host'],
        'database'  => $sqlConfig['database'],
        'username'  => $sqlConfig['username'],
        'password'  => $sqlConfig['password'],
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ], $this->connectionName);
....
....
$pimple['db'] = function ($c) use ($capsule) {
        return $capsule;
    };

我在我的dependencies.php中称它为

然后,当我到达路线时,请执行以下操作:

$container = $app->getContainer();
$validatorMiddleware = new \....\Middleware\BaseMiddleware($container->get('db'));

我将中间件init更改为此

private function initiateValidatorFactory($dbConnectionSettings)
{
    $validatorFactory = new ValidatorFactory(
        new Translator(new FileLoader(new Filesystem(), "en"), "en"),
        null);

    $resolver = new ConnectionResolver(['mysql' =>  $dbConnectionSettings->getConnection('mysql')]);

    $verifier = new DatabasePresenceVerifier($resolver);

    $validatorFactory->setPresenceVerifier($verifier);

    $this->validatorFactory = $validatorFactory;
}

请注意,我的变量不再有意义了,但是您将弄清楚如何使它变得更好和更有趣。 (包括我)。 最重要的是,这可以以某种方式起作用。 我知道这很骇人。 如果您希望发布不包含骇客的答案,请执行=)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM