2011-12-16 21 views
1

オプションとしてregex stringを取得するフィールドを作成する必要があります。Symfony2 - Regex validation

だから、PatternTypeフィールドからなる:

public function getDefaultOptions(array $options) 
{ 

    $defaultOptions = array(
     'data'    => null, 
     'data_class'  => null, 
     'trim'    => true, 
     'required'   => true, 
     'read_only'   => false, 
     'max_length'  => null, 
     'pattern'   => null, 
     'property_path'  => null, 
     'by_reference'  => true, 
     'error_bubbling' => false, 
     'regexp'   => false, 
     'error_mapping'  => array(), 
     'label'    => null, 
     'attr'    => array(), 
     'invalid_message' => 'This value is not valid', 
     'invalid_message_parameters' => array() 
    ); 

    $class = isset($options['data_class']) ? $options['data_class'] : null; 

    // If no data class is set explicitly and an object is passed as data, 
    // use the class of that object as data class 
    if (!$class && isset($options['data']) && is_object($options['data'])) { 
     $defaultOptions['data_class'] = $class = get_class($options['data']); 
    } 

    if ($class) { 
     $defaultOptions['empty_data'] = function() use ($class) { 
      return new $class(); 
     }; 
    } else { 
     $defaultOptions['empty_data'] = ''; 
    } 


    $patt = $options['regexp']; 

    unset($options['regexp']); 

    $defaultOptions['validation_constraint'] = new Regex(
                 array(
                  'pattern' => $patt, 
                  'match' => true, 
                  'message' => 'Niewłaściwy format' 
                  ) 
                 ); 


    var_dump($defaultOptions); 


    return $defaultOptions; 
} 

のvar_dumpは、正規表現オブジェクト内で、ウェルフォーマット設定の配列を返すを - しかし、フォームが動作しない検証を生成する際に - 任意の値を渡します。どんな考え?

答えて

1

どうしてですか?既にregex validatorがあります。そのバリデータで通常のテキストフィールドを使用するだけです。

バインドするモデルクラスのないフォームが必要な場合は、the corresponding sectionをお読みください。

+0

これは、Abstract Typeを拡張し、validator_constant = new Regex(params)でデフォルトオプションの配列を返すcreatedフィールドです。 – McOffsky

+0

(前回の続き)私がやっていることは、xsdファイルに基づいてフォームを生成するアプリケーションです。まず、アノテーションに書かれたフィールド(パターンや型など)の属性を持つPHP静的クラスに変換します。すべてのxsdファイルには、構造のようなかなり大きなツリーがあり、その属性とともに他のファイルも含まれています。明らかに、ポーランドの納税者番号を検証するためのカスタムフィールドが必要でした(フィールドに属性として書かれたパターンがあります)。問題は、用量が働くことです。 – McOffsky

+0

...そして、私たちが作る注釈は、symfony2の検証注釈ではありません。より多くの情報を渡すので、formbuilder-> add();でフォームを作成します。 – McOffsky

0

私は間違っていることを発見しました。バリデータ定数はルートフォームオブジェクトにのみ追加できます(他のsymfonyは単に無視します)。だから、私は必要なのは単純にルートフォームを取得し、validator_groupオプションを設定してvalidator_constantを追加するというものです。次に、フィールドvalidator_groupを適切なものに割り当てます。