你如何用 Pimple 注射 Valitron 并重复使用

How do you Inject Valitron with Pimple and reuse

所以我一直在使用 Valitron 库来验证发布的表单,并且 运行 遇到了一些问题。

构造函数接受要验证的数据,当您将库作为 Pimple 或其他容器的依赖项注入时,这会导致问题。 如果你想验证多个东西,它也会导致问题,因为基本上每次你想使用它时都必须实例化库。

有解决办法吗?

最终我希望能够将库定义为服务并像这样用 Pimple 注入它:

$container['Valitron'] = function(){
    return new \Valitron\Validator();
};

任何需要验证某些东西的 controller/class 都会在它们的构造函数中初始化它,如下所示:

public function __construct($valitron)
{
    $this->valitron = $valitron;
}

任何时候我需要验证一些东西我可以说这样的话:

// First use
$this->valitron->setData($_POST);
$this->valitron->rule('required', 'name')->message('Im required')->label('Name');
$this->valitron->validate();

// Second use
$this->valitron->setData($_GET);
$this->valitron->rule('required', 'test')->message('Im also required')->label('Test');
$this->valitron->validate();

但是似乎没有 setData 函数,或者任何在使用之间重置库的方法。

问题: 我如何将 Valitron 与 Pimple 一起使用并再次使用它来一次验证多项内容?

请注意:必须注入。它也不应该在每次使用前都需要初始化。请不要告诉我我必须扩展库或破解它才能使其正常工作!

当我搜索与您相同的问题时遇到了您的问题我在 Valitron 的回购中也遇到了以下 Github 问题,请参阅 https://github.com/vlucas/valitron/issues/108

vlucas 写道: Valitron 目前被设计为一次性实例,因此它可能会导致奇怪的事情,例如自定义标签和错误消息在验证之间没有被重置(因为它从来没有打算那样使用) .