1

例如,我們有兩個字段,過濾器和校驗的一種形式:如何設置另一個表單域的值?

$factory = new \Zend\Form\Factory(); 
$form = $factory->createForm([ 
    'elements' => [ 
     [ 
      'spec' => [ 
       'name' => 'fieldOne', 
       'type' => 'Text', 
      ], 
     ], 
     [ 
      'spec' => [ 
       'name' => 'fieldTwo', 
       'type' => 'Text', 
      ], 
     ], 
    ], 
    'input_filter' => [ 
     'fieldOne' => [ 
      'filters' => [ 
       ['name' => 'StringTrim'], 
      ], 
      'validators' => [      
       new \Application\Validator\FieldOneValidator(), 
      ], 
     ], 
     'fieldTwo' => [ 
      'filters' => [ 
       ['name' => 'StringToUpper'], 
      ], 
     ], 
    ], 
]); 

如果fieldOne是有效的,fieldTwo是空的,那麼我們就需要濾波值形式fieldOne設置成fieldTwo和過濾。

$form->setData([ 
    'fieldOne' => ' test ', 
    'fieldTwo' => '', 
]); 
if ($form->isValid()) { 
    $form->getData(); // ['fieldOne' => 'test', 'fieldTwo' => 'TEST'] 
} 

$form->setData([ 
    'fieldOne' => ' test ', 
    'fieldTwo' => 'not empty', 
]); 
if ($form->isValid()) { 
    $form->getData(); // ['fieldOne' => 'test', 'fieldTwo' => 'NOT EMPTY'] 
} 

如何實現這一點?

回答

0

看一看的「相同」的驗證: https://github.com/zendframework/zend-validator/blob/master/src/Identical.php#L154

在你驗證,有傳遞給isValid第二個參數$context,讓你在表單中的值。

你想要利用其他字段的填充方式來驗證當前字段。

換句話說,創建一個定製的驗證,並使用您的驗證器,您連接到您的場依賴性內「語境」。

+0

驗證器只驗證該值,但我需要使用上下文對其進行更改。 –

相關問題