我正在使用 Slim 和带有 Eloquent 模型的 Illuminate Database 包构建 API。我已经使用 Capsule 实例化了数据库处理程序,如README
. 然而,现在我想在我的模型上使用验证功能而不安装完整的 Laravel 套件,但我无法完全理解这个库的设计。
我该怎么办?似乎为 Laravel 提供的文档非常希望您开箱即用地使用 Laravel。
我正在使用 Slim 和带有 Eloquent 模型的 Illuminate Database 包构建 API。我已经使用 Capsule 实例化了数据库处理程序,如README
. 然而,现在我想在我的模型上使用验证功能而不安装完整的 Laravel 套件,但我无法完全理解这个库的设计。
我该怎么办?似乎为 Laravel 提供的文档非常希望您开箱即用地使用 Laravel。
这是当前版本的解决方案: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”字段,从而显示验证错误。
至于 2021 年初,来自上述@vivanov 的解决方案与 Laravel 8 包完美配合。
在这里,我添加了使用默认 Laravel 验证消息的功能,因为使用自己的验证消息太烦人了。
这是您必须在@vinvanov 解决方案中更改的内容。
composer.json
"require": {
"illuminate/validation": "^8.25",
"illuminate/translation": "^8.25"
},
将 Laravel验证消息文件复制到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 验证文档。
PS:学分也来自杰夫的这篇博文。
PPS:这很棒,尽管版本从 5.6 跳到 8.25,但包界面很稳定并且可以无缝运行。如此成熟和有见地的开源态度和对开发者的极大关怀来自 Taylor Otwell。当您在一个糟糕的 PHP 代码库中使用现代 PHP 框架之外的工作时,您只能体会到最大的便利性。
我不想建议这个,但 Laravel 验证器可能不是你想要的。我建议查看 Symfony 或 Zend Framework (2+) 中的验证器类。它们作为独立的验证器工作得很好,事实上我目前在 Laravel 项目中使用 ZF2 表单类和验证器,因为 Laravel 表单和验证器类还没有达到标准。
这可能不是您想听到的答案,但从长远来看,它可能会为您减轻一些痛苦。
我只是想知道同样的事情,一年后我在这里发现 delatbabel 的答案是非常想要的。我确实找到了以下要点,其中 spekkionu 有一个相当简单的设置来帮助您入门。(它在我的机器上工作??;P)它展示了如何为工厂等制作翻译器。当你illuminate/validation
用作曲家导入时,它都包括在内。
希望它有所帮助: https ://gist.github.com/spekkionu/e9103993138e666f9f63
最好的,