php - 让 Laravel 8 的 Validator 类在框架之外工作

标签 php laravel laravel-validation

所以我安装了这个包https://packagist.org/packages/illuminate/validation使用命令 composer require illuminate/validation 进入我的项目,在那里你可以获得独立版本的 Laravels 验证器。然后,当我尝试像文档说的那样使用它时,您应该 https://laravel.com/docs/8.x/validation并尝试像这样实现它

    $validated = Validator::make($data, [
        'token' => 'required',
        'email' => 'required',
        'password' => 'required',
    ])->validate();

我收到一条 'message' => 'A facade root has not been set.', 这也是 $data 对象

    array (
        'token' => 'c11019348c3876f033603a0d0030ad3f0c9ec7d7ae211a49',
        'email' => 'ewaeaw',
        'password' => 'ewaeaw',
      ),

所以我是否需要在某处调用库或者我做错了什么因为包的 Github 自述文件只是说 https://github.com/illuminate/validation [只读] Illuminate Validation 组件的子树拆分(参见 laravel/framework) 所以我缺少哪些步骤,所以它工作正常,以便我可以将它实现到我的项目中

我也调查了这个 Fail to make Laravel 4's Validator class work outside the framework它说你可以用这行 $factory = new\Illuminate\Validation\Factory(new\Symfony\Component\Translation\Translator('en')); 但是 \Illuminate\Validation\Factory 类不再存在。因为命名空间是 Illuminate\Support\Facades\Validator prob cause it 9 years old?所以有人有任何最新的方法来做到这一点?还查看供应商 map Facades 文件夹中不存在任何工厂类

最佳答案

对我来说,解决方案是在 Beri 对问题本身的评论中给出的,他发布了一个 link一种方法,该方法也适用于 illuminate/validation 类的最新版本 (9,14)。我会把它贴在这里作为答案。因为我在谷歌上找到的许多答案不适用于较新版本的 illuminate/validation 类。所以我认为它可能会帮助其他人。

它需要:

"require": {
    "illuminate/filesystem": "^9.14",
    "illuminate/translation": "^9.14",
    "illuminate/validation": "^9.14"
}

jeff 在他的 website 上创建的这个不错的类:

<?php
use Illuminate\Validation;
use Illuminate\Translation;
use Illuminate\Filesystem\Filesystem;
class ValidatorFactory
{
    private $factory;
    
    public function __construct()
    {
        $this->factory = new Validation\Factory(
            $this->loadTranslator()
        );
    }
    protected function loadTranslator()
    {
        $filesystem = new Filesystem();
        $loader = new Translation\FileLoader(
            $filesystem, dirname(dirname(__FILE__)) . '/lang');
            $loader->addNamespace(
                'lang',
                dirname(dirname(__FILE__)) . '/lang'
            );
        $loader->load('en', 'validation', 'lang');
        return new Translation\Translator($loader, 'en');
    }
    public function __call($method, $args)
    {
        return call_user_func_array(
            [$this->factory, $method],
            $args
        );
    }
}

它需要一个翻译文件,需要放在项目文件夹lang/en/validation.php 任何语言的翻译都可以在github上找到。

如果操作正确,您可以像这样开始使用验证类:

$validator = (new ValidatorFactory())->make(
    $data = ['email'=>'thisfailsasemail'],
    $rules = ['email'=>'required|email']
);
// $validator->fails();
// $validator->passes();
// $validator->errors();

关于php - 让 Laravel 8 的 Validator 类在框架之外工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71016376/

相关文章:

javascript - 从动态表mysql php获取值

php - 通过 HTML 文件将参数从服务器端传递给 Javascript

laravel - 如何在laravel中对多个项目进行单一身份验证?

php - 如何在 PHP Laravel Lumen 中建立与数据库的连接?

php - Laravel 表单请求未更新可为空字段

php - Laravel Livewire 验证 - required_without_all 和 required_without 不起作用

php - 注册后的时间计数

javascript - Magento Custom 模块用于 T 恤设计定制

php - Laravel 拒绝在 iFrame 中显示为 "' X-Frame-Options' to 'SAMEORIGIN'。”

Laravel 5.7 - 重写请求验证类中的 all() 方法来验证路由参数?