2017-02-15 8 views
0

Respect\Validation\Validator opensource PHPクラスを使用してエラーをキャッチしようとしています。私はその例を使って一連の小切手を作成しました。それはうまくいくようですが、エラーメッセージをキャッチしてユーザーに表示できるようにしました。私は完全な配列(すべてをチェックし、すべてのメッセージを配列に格納する)としてそのようにする方法は見当たりませんでした。その代わりに、私はValidatorのcheckメソッドを使ってサイクルを進めようとしました。Respect Validation Validator - エラーをキャッチしながら配列を使用する

これはF3(Fat Free)フレームワークを使用したクラスメソッドの内部です。

私は次のエラーで終わる:

Cannot use object of type Respect\Validation\Validator as array 

コードは以下の通りです。ここで配列を使用してこのタスクを実行する適切な方法は何ですか?助けてくれてありがとう!私はまた、彼らのドキュメントに見られるようなアサートメソッドを使用しようとしましたが、以下の変化を利用し、私の代わりに私の反響を見ての、500サーバー内部エラーで別のエラーを取得し

$registerValidator = Respect\Validation\Validator::attribute('email', Respect\Validation\Validator::email()->length(1,null)->notEmpty()) 
           ->attribute('address', Respect\Validation\Validator::stringType()->length(3,null)->notEmpty()) 
           ->attribute('city', Respect\Validation\Validator::alpha()->length(2,60)->notEmpty()) 
           ->attribute('state', Respect\Validation\Validator::alpha()->length(2,2)->notEmpty()) 
           ->attribute('zip', Respect\Validation\Validator::intType()->length(5,5)->notEmpty()); 

      foreach($this->f3->get('POST') as $key => $value){ 
       try{ 
        $registerValidator[$key]->check($value); 
       } catch (\InvalidArgumentException $e) { 
        $errors = $e->getMainMessage(); 
        $this->userMessage($errors, 'warning'); 
        $this->f3->reroute('/register'); 
       } 
      } 

 try{ 
      $registerValidator->assert($this->f3->get('POST')); 
     } catch (Respect\Validation\Validator\NestedValidationException $e) { 
      $errors = $e->getMessages(); 
      echo($errors); // I can't even get here. 
      foreach($errors as $error){ 
       $this->userMessage($error, 'warning'); 
      } 
      $this->f3->reroute('/register'); 
     } 

この500エラーでは、私のエコーを見るのではなく、ページが完全に読み込まれなくなります。あなたは$registerValidator[$key]->check($value)上でやっているよう

All of the required rules must pass for ... 

答えて

1

あなたは本当に配列としてValidatorクラスを使用することはできません。 $registerValidatorのオブジェクトには、の入力を検証するための一連のルールが含まれています。あなたのケースでは

私は入力POSTからの配列なので、あなたの代わりにAttributeKeyバリデータを使用する必要があり、すべての最初のものであると信じています。

catchステートメントに入力ミスがあるため、エラーをキャッチできない本当の理由は、Respect\Validation\Validator\NestedValidationExceptionではなく、Respect\Validation\Exceptions\NestedValidationExceptionのようになります。

関連する問題