使 Laravel 8 的验证器 class 在框架外工作

make Laravel 8's Validator class work outside the framework

所以我安装了这个包https://packagist.org/packages/illuminate/validation into my project with the command composer require illuminate/validation where you get a stand-alone version of Laravels validator. Then when I tried to use it like the docs say you should 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 [READ ONLY] 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')); 但是 class \Illuminate\Validation\Factory 不存在了。因为命名空间是 Illuminate\Support\Facades\Validator 可能是因为它已有 9 年历史了?所以有人有任何最新的方法来做到这一点?还查看供应商地图 Facades 文件夹

中不存在任何工厂 class

您可以像下面这样简单地使用验证

use Illuminate\Support\Facades\Validator;

        $validation=Validator::make($request->all(),[
        'token'=>'required',
        'email'=>'required',
        'password'=>'required',
    ]);
    if($validation->fails())
    return response()->json($validation->errors());

您可以通过邮递员或任何其他方式进行测试

希望对你有所帮助

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

需要:

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

杰夫在他的 website:

上创建的这个不错的 class
<?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

上找到

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

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