2015-12-25 12 views
5

私はmoneyFieldsetに2つのフィールド、金額、通貨を設定しました。フィールドセットの必須パラメータを動的に変更する

class MoneyFieldset ... 
{ 
public function __construct($name = null, $options = array()) 
    { 
     parent::__construct($name, $options); 
     $this->setHydrator(...); 

     $this->add(array(
      'name' => 'currency', 
      'type' => 'select', 
      'options' => array(
       'value_options' => \Core\Service\Money::getAvailableCurrencies(true), 
      ), 
      'attributes' => array(
       'value' => \Core\Service\Money::DEFAULT_CURRENCY, 
      ), 
     )); 

     $this->add(array(
      'name'  => 'amount', 
      'type'  => 'text', 
     )); 
    } 
} 
public function getInputFilterSpecification() 
    { 
     $default = [ 
      'amount' => [ 
       'required' => false, 
       'allow_empty' => true, 
       'filters'  => [ 
        ['name' => AmountFilter::class] 
       ], 
       'validators' => [ 
       ] 
      ], 
      'currency' => [ 
       'required' => false, 
       'allow_empty' => true, 
       'filters'  => [ 
        ['name' => StringToUpper::class] 
       ], 
       'validators' => [ 
       ] 
      ] 
     ]; 
     return \Zend\Stdlib\ArrayUtils::merge($default, $this->filterSpec, true); 
    } 

私はこのように私の他のフィールドセットにmoneyFieldsetを使用しています:

 // Price Field 
     $this->add(array(
      'name'  => 'price', 
      'type'  => 'form.fieldset.moneyFieldset', 
      'attributes' => array(
       'required' => true, 
       'invalidText' => 'Please type an amount' 
      ), 
      'options' => array(
       ... 
      ), 
     )); 

私はこのようなフィルタを設定します。価格が持っているので、それが働いていない

function getInputFilterSpecification() 
    { 
     'price' => [ 
      'required' => true, 
      'allow_empty' => false, 
     ], 
    } 

2フィールドなので、どうすればの価格[額]価格[curreny]が必要ですか?

答えて

4

次の配列構造を使用して、ネストされたフィールドセットの入力仕様を(フォームのコンテキスト内で)指定することができます。あなたは動的入力フィルタの値を変更する場合

public function getInputFilterSpecification() 
{ 
    return [ 
     // ... 
     'price' => [ 
      'type' => 'Zend\InputFilter\InputFilter', 
      'amount' => [ 
       'required' => true, 
      ], 
      'currency' => [ 
       'required' => true, 
      ] 
     ], 
     //... 
    ]; 
} 

は、それがサービスファクトリクラスを使用してバリデータを作成し、配列ではなく、オブジェクトのAPIを使用して、フォームに添付検討する価値があるかもしれません。

+0

私はそれを試しましたが、何も変わりませんでした。これは出力です: '' 'required = 'required''パラメータはありません。 – Eray

+0

zf2では、inputFilterSpecificationでフィールドまたはフィールドのグループが必要であると言って、必須の属性がHTMLに設定されているわけではなく、$ form-> isValid()を実行したときに検証のためだけです。 validationGroup内 – Hooli

+0

私はまた、必要な属性も設定する必要があります。私は 'price [attributes] [required] = true'が' required = required' HTML属性を生成すると考えました – Eray

3

私はこのような必要として宣言@ AlexPさんのコメント、フィールド、またはフィールドのグループに言ったように:

<input type="text" required="required"/> 

function getInputFilterSpecification() 
    { 
     'price' => [ 
      'required' => true, 
      'allow_empty' => false, 
     ], 
    } 

は、それがこのようなHTMLを印刷されることを意味しません

あなたのフィールドが空で必須であるかその他のチェックがある場合は、$form->isValid()を実行するときにチェックするだけです。 これを実現するには、これらのフィールドを必要とする属性を設定するだけです。あなたが既にしたように。属性は、クラス属性と同じように、htmlコードを入力に追加できます。

P.S:AlexPの答えは最高の答えです。私はそれについてもっと多くの情報を提供しています。

関連する問題