[英]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.