在独立的非Laravel应用程序中照亮Validator

时间:2015-02-18 00:34:50

标签: php validation laravel illuminate-container

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

我该怎么做?看起来为Laravel提供的文档非常期待您开箱即用Laravel。

4 个答案:

答案 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 解决方案中更改的内容。

  1. 更新composer.json
    "require": {
        "illuminate/validation": "^8.25",
        "illuminate/translation": "^8.25"
    },
  1. 将 Laravel validation messages file 复制到 yourproject/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);

在我的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

最佳,