2016-11-10 19 views
0

ユニーク制約を構成するエンティティには、fieldAfieldBの2つのフィールドがあり、それぞれデータベースの列field_afield_bにマッピングされています。一意性制約違反を確認してください

私の入力フィルタは、フィールドの両方が必要です。

public function init() 
{ 
    parent::init(); 

    $this->add([ 
     'name' => 'field_a', 
     'required' => true, 
     'allow_empty' => false, 
    ]); 

    $this->add([ 
     'name' => 'field_b', 
     'required' => true, 
     'allow_empty' => false, 
    ]); 
} 

私は、これらの2つのフィールドは、データベーステーブルに一意であることを検証するための最良の方法を把握しようとしています。すでに同じフィールド値を持つ別のエンティティが存在する場合、入力フィルタは検証に失敗します。

私はisValid関数をオーバーライドしてカスタムロジックをそこに配置すると考えていました。

+3

両方のフィールドでコールバックバリデータ(Zend \ Validator \ Callback)を使用し、カスタムロジックをコールバック関数に入れることをお勧めします。 –

+1

@ElenaSlavchevaこれは答えとして掲示することができます。 – Wilt

答えて

1

両方のフィールドでコールバックバリデータ(Zend \ Validator \ Callback)を使用し、カスタムロジックをコールバック関数に入れることをお勧めします。

フォームフィールドにフィルタとバリデータを追加するのにInputFilterを使用しますが、Form/Fieldsetクラスに直接InputFilterProviderInterfaceを実装できます。

use Zend\InputFilter\InputFilter; 

class FormFilter extends InputFilter 
{ 

    public function __construct() 
    { 
     $this->add(
     array(
      'name' => 'field_a', 
      'filters' => array(), 
      'validators' => array (
       array(
        'name' => 'Zend\Validator\Callback', 
        'options' => array(
         'messages' => array(
           \Zend\Validator\Callback::INVALID_VALUE => 'Custom Message', 
         ), 
         'callback' => array($this,'validateFieldA'), 
        ), 
       ), 

      ) 
     ) 
     ); 

     $this->add(
     array(
      'name' => 'field_b', 
      'filters' => array(), 
      'validators' => array (
       array(
        'name' => 'Zend\Validator\Callback', 
        'options' => array(
         'messages' => array(
           \Zend\Validator\Callback::INVALID_VALUE => 'Custom Message', 
         ), 
         'callback' => array($this,'validateFieldB'), 
        ), 
       ), 

      ) 
     ) 
     ); 

    } 

    public function validateFieldA($value, $context) 
    { 
     // $value contains the field_a value 
     // $context['field_b'] contains the field_b value 

     // put your custom logic here 
     // return true if the fields are unique 
     // return false if the fields are not unique 
    } 

    public function validateFieldB($value, $context) 
    { 
      .... 
    } 


} 
関連する問題