你如何用疙瘩注入Valitron并重复使用

时间:2015-09-15 08:07:49

标签: php validation dependency-injection pimple

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

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

有什么方法吗?

最终我希望能够将库定义为服务并将其注入Pimple,如下所示:

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

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

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一起使用并重复使用它来一次验证多个事物?

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

1 个答案:

答案 0 :(得分:2)

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

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