独立的非Laravel应用程序中的Illuminate Validator

Vik*_*tor 1 php validation laravel illuminate-container

我正在使用Slim和带有Illoquent模型等的Illuminate Database包构建API。已经使用Capsule实例化了数据库处理程序,如所示README。但是,现在我想在不安装完整的Laravel套件的情况下在模型上使用验证功能,但是我无法完全理解该库的设计。

我将如何处理?看来为Laravel提供的文档非常期待您可以直接使用Laravel。

viv*_*nov 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我故意错过了用于验证的数据中的“ body”字段,因此显示了验证错误。


Val*_*Shi 5

至于 2021 年初,@vivanov 的解决方案与 Laravel 8 软件包完美配合。

在这里,我添加了使用默认 Laravel 验证消息的功能,因为使用您自己的验证消息太烦人了。

以下是您必须在 @vinvanov 解决方案中更改的内容。

  1. 更新composer.json
    "require": {
        "illuminate/validation": "^8.25",
        "illuminate/translation": "^8.25"
    },
Run Code Online (Sandbox Code Playgroud)
  1. 将 Laravel验证消息文件复制到您的project/laravel/en/validation文件夹中。

  2. 修改@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);
Run Code Online (Sandbox Code Playgroud)

请参阅我的要点中包含更多注释的完整代码;

就是这个。您已经准备好了适合您的默认 Laravel 消息。

这是 Laravel 验证文档

PS:感谢Jeff 的这篇博文

PPS:这真是太棒了,尽管版本从 5.6 跳到了 8.25,但包界面仍然稳定并且无缝运行。如此成熟而富有洞察力的开源态度和对开发者的无微不至的关怀来自于Taylor Otwell。只有当您在现代 PHP 框架之外、在糟糕的 PHP 代码库中工作时,您才能体会到它的最大便利性。


del*_*bel 1

我不想这么建议,但 Laravel 验证器可能不是您想要的。我建议查看 Symfony 或 Zend Framework (2+) 中的验证器类。它们作为独立验证器工作得很好,事实上,我目前正在 Laravel 项目中使用 ZF2 表单类和验证器,因为 Laravel 表单和验证器类还没有达到标准。

这可能不是您想听到的答案,但从长远来看,它可能会为您减轻一些痛苦。