2016-04-18 4 views

答えて

1

ケーキ3のように見えますが、validates()メソッドがなくなりました。検証は、newEntityまたはpatchEntityに電話すると発生します。 1つずつ検証することが重要な場合は、各フィールドを別々にパッチし、それぞれのフィールドの後にエラーをチェックする必要があります。あたり

http://book.cakephp.org/3.0/en/orm/validation.html#using-validation-as-application-rules

+0

複数のフィールドはどうですか?私はこの 'if($ userEntity-> errors(['email'、 'username']))'のように進んでいますが、他のすべてのフィールドについてもメッセージを受け取ります。 – sk001

+1

hmm面白いです。おそらく[リンク](http://book.cakephp.org/3.0/en/core-libraries/validation.html#validating-data)を試してみてください。 '$ errors = $ validator-> errors($ this-> request-> data()); if(isset($ errors ['email'])){ falseを返します。 } ' –

3

として

$userEntity = $usersTable->newEntity(); 
$userEntity = $usersTable->patchEntity(['email' => 'not an email!!']); 
if($userEntity->errors('email')){ 
    return false; // Invalid email 
} 

using a different validation set上のドキュメントを参照してください。フォームの各ステップを検証する関数を設定し、newEntityまたはpatchEntity呼び出しで使用する関数を指定する必要があります。複数ステップのフォームの場合、2番目のステップの検証では、おそらく最初のステップの検証が追加され、その間にデータを改ざんしていないことが保証されます。 STEP1用コントローラ機能で

:だから、あなたはこのようなものを持っていると思います

$entity = $table->newEntity(
    $this->request->data, 
    ['validate' => 'step1'] 
); 

とSTEP2のためのコントローラ機能で:

$entity = $table->newEntity(
    $this->request->data, 
    ['validate' => 'step2'] 
); 

など

であなたのテーブルクラス:

public function validationStep1($validator) 
{ 
    $validator 
     ->add('email', 'notEmpty', [ 
      'rule' => 'notEmpty', 
      'message' => __('Provide a valid email'), 
     ]) 
     ->add('username', 'notEmpty', [ 
      'rule' => 'notEmpty', 
      'message' => __('Provide a valid username') 
     ]); 
    return $validator; 
} 

(おそらく、電子メールアドレスが適切であることを確認するなどの他の検証がある)。

そして

public function validationStep2($validator) 
{ 
    $validator = $this->validationStep1($validator) 
     ->add('first_name', 'notEmpty', [ 
      'rule' => 'notEmpty', 
      'message' => __('Provide your first name'), 
     ]); 
    return $validator; 
} 

のように。

関連する問題