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

Php Laravel雄辩的数据库验证程序在Slim 3中不起作用,php,laravel,laravel-5,eloquent,slim,Php,Laravel,Laravel 5,Eloquent,Slim,我在Slim 3中开发。我决定作为ORM使用Elount,并希望在中间件中使用Illumb验证器来验证到达控制器的信息 不需要使用数据库来验证的验证规则工作得很好,但我在使用数据库验证器时遇到了问题 我没有得到任何错误,它只是没有通过时,它应该 据我所知,我应该创建验证器工厂,然后调用make函数。例如: $v = $this->validatorFactory ->make($toCheck, $this->rules[$route], $this->me

我在Slim 3中开发。我决定作为ORM使用Elount,并希望在中间件中使用Illumb验证器来验证到达控制器的信息

不需要使用数据库来验证的验证规则工作得很好,但我在使用数据库验证器时遇到了问题

我没有得到任何错误,它只是没有通过时,它应该

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

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

if ($v->fails()) {....}
因为它适用于所有不需要数据库的路由,所以我不再详细介绍。我认为问题在于如何将PresenceValidator添加到我的工厂

我是这样做的

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查询在这一点上起作用。这就是为什么我认为问题不在于连接类

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

所有被注释掉的检查看起来都正常

我试着在谷歌上搜索,看到人们提到了一些关于“雄辩的引导”。我试图在我的代码中找到可以做到这一点的地方,但没有成功

我最不想知道的是我如何写我的规则。示例规则如下:

'platformid' => 'exists:mysql.platform,platformid'
PS不要问为什么在表“platformid=”中有列“platformid”)

我正在使用Illumb/validation 5.5和Illumb/database 5.5


谢谢您的时间和您能提前提供的任何帮助。

我不知怎么弄明白了。这很不好,但我想我现在可以忍受了。我不太明白为什么这种方法有效,但它确实有效

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

$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中称之为dependencies

然后,当我谈到路线时,我会这样做:

$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;
}
注意我的变量是如何不再有意义的,但是你会发现如何使它变得更好。(包括我在内)。最重要的是,这种方法在某种程度上是有效的。我知道这很难理解。如果您希望发布一个不包含黑客的答案,请执行=)