0

そのため、主に投稿されたフォームを検証するために Valitron Library を使用しており、いくつかの問題に遭遇しました。

コンストラクターは検証するデータを受け入れるため、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 で使用し、一度に複数のことを検証するために再利用するにはどうすればよいですか?

注意: 注射する必要があります。また、使用するたびに初期化する必要もありません。ライブラリを拡張したり、適切に機能させるためにハッキングしたりしなければならないなどとは言わないでください。

4

1 に答える 1

2

あなたが少ししたのと同じことを探していたときにあなたの質問に出くわしました。Valitronのレポで次のGithubの問題にも出くわしました。https://github.com/vlucas/valitron/issues/108を参照してください

vlucas は次のように書いています: Valitron は現在 1 回限りのインスタンスとして設計されているため、カスタム ラベルやエラー メッセージが検証間でリセットされないなどの奇妙なことが発生する可能性があります (そのように使用されることは決して意図されていないため)。

于 2016-03-16T08:19:15.063 に答える