我正在使用 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验证消息文件复制到yourproject/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
最好的,