Php Laravel雄辩的数据库验证程序在Slim 3中不起作用
我在Slim 3中开发。我决定作为ORM使用Elount,并希望在中间件中使用Illumb验证器来验证到达控制器的信息 不需要使用数据库来验证的验证规则工作得很好,但我在使用数据库验证器时遇到了问题 我没有得到任何错误,它只是没有通过时,它应该 据我所知,我应该创建验证器工厂,然后调用make函数。例如: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
$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;
}
注意我的变量是如何不再有意义的,但是你会发现如何使它变得更好。(包括我在内)。最重要的是,这种方法在某种程度上是有效的。我知道这很难理解。如果您希望发布一个不包含黑客的答案,请执行=)