3

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

我该怎么办?似乎为 Laravel 提供的文档非常希望您开箱即用地使用 Laravel。

4

4 回答 4

10

这是当前版本的解决方案: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”字段,从而显示验证错误。

于 2017-01-31T11:49:39.583 回答
2

至于 2021 年初,来自上述@vivanov 的解决方案与 Laravel 8 包完美配合。

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

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

  1. 更新composer.json
    "require": {
        "illuminate/validation": "^8.25",
        "illuminate/translation": "^8.25"
    },
  1. 将 Laravel验证消息文件复制到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 验证文档

PS:学分也来自杰夫的这篇博文。

PPS:这很棒,尽管版本从 5.6 跳到 8.25,但包界面很稳定并且可以无缝运行。如此成熟和有见地的开源态度和对开发者的极大关怀来自 Taylor Otwell。当您在一个糟糕的 PHP 代码库中使用现代 PHP 框架之外的工作时,您只能体会到最大的便利性。

于 2021-01-30T13:52:06.873 回答
1

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

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

于 2015-02-18T02:02:20.580 回答
0

我只是想知道同样的事情,一年后我在这里发现 delatbabel 的答案是非常想要的。我确实找到了以下要点,其中 spekkionu 有一个相当简单的设置来帮助您入门。(它在我的机器上工作??;P)它展示了如何为工厂等制作翻译器。当你illuminate/validation用作曲家导入时,它都包括在内。

希望它有所帮助: https ://gist.github.com/spekkionu/e9103993138e666f9f63

最好的,

于 2017-01-25T18:32:38.370 回答