【发布时间】:2018-02-15 08:25:09
【问题描述】:
我正在使用 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,但我认为我的用例不需要它(或者我可能不确定)。
所有被注释掉的检查看起来都不错。
我尝试使用谷歌搜索,发现人们提到了一些关于“启动 eloquent”的内容。我试图在我的代码中找到可以做到这一点的地方,但没有成功。
最后一件事是我缺少的是我如何编写我的规则。示例规则是这样的:
'platformid' => 'exists:mysql.platform,platformid'
PS 不要问为什么我们在“platform”表中有“platformid”列=)。
我正在使用照明/验证 5.5 和照明/数据库 5.5。
感谢您的宝贵时间以及您可以提前提供的任何帮助。
【问题讨论】:
标签: php laravel laravel-5 eloquent slim