Поэтому я использовал библиотеку 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 и использовать его для проверки нескольких вещей одновременно?
Пожалуйста, обратите внимание: он должен быть введен. Его также не нужно инициализировать перед каждым использованием. Пожалуйста, не говорите мне, что я должен расширить библиотеку или взломать ее, чтобы она работала правильно!
Столкнулся с вашим вопросом, когда я искал то же самое, что и вы, но я также столкнулся со следующей проблемой Github в репозитории Valitron, см. https://github.com/vlucas/valitron/issues/108
vlucas пишет: Valitron в настоящее время разрабатывается как одноразовый экземпляр, поэтому он может привести к странным вещам, таким как пользовательские метки и сообщения об ошибках, которые не будут сбрасываться между валидациями (потому что он никогда не предназначался для такого использования).
Других решений пока нет …