我正在使用Slim和使用Eloquent模型等的Illuminate数据库包构建API。我已经使用Capsule实例化了数据库处理程序,如README
所示。但是,现在我想在我的模型上使用验证功能而不安装完整的Laravel套件,但我无法完全理解这个库的设计。
我该怎么做?看起来为Laravel提供的文档非常期待您开箱即用Laravel。
答案 0 :(得分:5)
以下是当前版本的解决方案:Laravel 5.4。 composer.json文件:
{
"name": "Validation standalone",
"require": {
"php": ">=5.6.4",
"illuminate/validation": "5.4.*",
"illuminate/translation": "5.4.*"
}
}
请注意,我们还必须要求“照亮/翻译”:“5.4。*”。然后在你的php文件中:
use Illuminate\Validation;
use Illuminate\Filesystem;
use Illuminate\Translation;
include 'vendor/autoload.php';
$filesystem = new Filesystem\Filesystem();
$fileLoader = new Translation\FileLoader($filesystem, '');
$translator = new Translation\Translator($fileLoader, 'en_US');
$factory = new Validation\Factory($translator);
$messages = [
'required' => 'The :attribute field is required.',
];
$dataToValidate = ['title' => 'Some title'];
$rules = [
'title' => 'required',
'body' => 'required'
];
$validator = $factory->make($dataToValidate, $rules, $messages);
if($validator->fails()){
$errors = $validator->errors();
foreach($errors->all() as $message){
var_dump($message);
}
}
这里我故意错过了为验证提供的数据中的“body”字段,因此会显示验证错误。
答案 1 :(得分:2)
至于 2021 年初,the solution from @vivanov above 可与 Laravel 8 软件包完美配合。
这里我添加了使用默认 Laravel 验证消息的功能,因为使用自己的验证消息太烦人了。
这是您必须在@vinvanov 解决方案中更改的内容。
composer.json
"require": {
"illuminate/validation": "^8.25",
"illuminate/translation": "^8.25"
},
将 Laravel validation messages file 复制到 your
project/laravel/en/validation` 文件夹。
修改@ivanov的解决方案代码如下(只反映变化)
$translationDir = dirname(__DIR__, 4) . '/project/laravel/en/validation';
$fileLoader = new Translation\FileLoader($filesystem, $translationDir);
$fileLoader->addNamespace('lang', $translationDir);
$fileLoader->load('en', 'validation', 'lang');
$validator = $factory->make($dataToValidate, $rules);
在我的gist中查看带有更多注释的完整代码;
就是这样。您已经为您准备好了默认的 Laravel 消息。
这是 Laravel 验证 docs。
PS:致谢也来自 Jeff 的 this blog post。
PPS:尽管版本从 5.6 跃升至 8.25,但包界面稳定且无缝运行,这真是太棒了。如此成熟且富有洞察力的开源态度和 Taylor Otwell 对开发人员的极大关怀。只有在糟糕的 PHP 代码库中在现代 PHP 框架之外工作时,您才能体会到这一点的最大便利。
答案 2 :(得分:1)
我讨厌建议这个但是Laravel验证器可能不是你想要的。我建议看一下Symfony或Zend Framework(2+)中的验证器类。它们作为独立的验证器工作得非常好,事实上我现在在Laravel项目中使用ZF2表单类和验证器,因为Laravel表单和验证器类只是不易使用。
这可能不是你想听到的答案,但从长远来看,这可能会为你节省一些痛苦。
答案 3 :(得分:0)
我只是想知道同样的事情,在这里,我在一年后发现delatbabel的答案是认真的想要。我找到了以下Gist,其中spekkionu有一个相当简单的设置来帮助你入门。 (它正在我的机器上工作??; P)它显示了如何为工厂等制作翻译器。当你用作曲家导入illuminate/validation
时,它都包括在内。
希望它有所帮助: https://gist.github.com/spekkionu/e9103993138e666f9f63
最佳,