2016-07-28 29 views
0

想知道是否有人以前遇到過這個問題。 我使用的是預配置的形式規範使用Zend \表格\廠創建形式,我也注入FormElementManager進工廠,因此可以找到我的自定義元素等使用工廠創建表單時,無法在ZF2中使用自定義驗證器

我的問題是:

即使如果任何自定義驗證器都在表單中註冊,則不會觸發isValid()方法。有什麼我需要做的,以獲得與工廠創建窗體觸發的isValid()。

我的源看起來像以下:

$spec = [ 
    'hydrator' => '...', 
    'fieldset' => [ 
     ..., 
     ..., 
     ..., 
    ], 
    'input_filter' => [ 
     ..., 
     .... 
     ...., 
     //contains my custom validator in here 
    ], 
]; 



$factory = new Factory(); 
$factory->setFormElementManager($formElementManager); 
$form = $factory->createForm($spec); 

但是,當我觸發:

$form->isValid() 

它沒有得到在我的自定義驗證和isValid電話。

回答

0

The input filter factory, Zend\InputFilter\Factory, is another dependency of the form factory。這個工廠被表單工廠用來創建應該被過濾和驗證的輸入。

爲了創建新的輸入並附加自定義過濾器和驗證器,輸入工廠使用Zend\InputFilter\InputFilterPluginManager,其內部爲also seeds the two other plugin managers, the FilterManager and the ValidatorManager

Zend\Validator\ValidatorPluginManager是可以創建自定義驗證程序的插件管理器。

因此,通過更新您的代碼並手動設置此依賴關係,將允許通過Zend\InputFilter\Factory找到自定義驗證器。

$formElementManager = $serviceManager->get('FormElementManager'); 
$inputFilterManager = $serviceManager->get('InputFilterManager'); 

$inputFilterFactory = new Zend\InputFilter\Factory(); 
$inputFilterFactory->setInputFilterManager($inputFilterManager); 

$formFactory = new \Zend\Form\Factory(); 

$formFactory->setFormElementManager($formElementManager); 
$formFactory->setInputFilterFactory($inputFilterFactory); 

$form = $formFactory->createForm($spec); 
+0

感謝Alex,您的評論。 –

+0

問題不僅在於此。基本上任何不需要的zf2表單元素都不會調用驗證器鏈中的驗證器,這會導致我遇到的問題。我的解決方案是在不需要輸入時添加Not_Empty驗證器,這會觸發所有驗證器,包括我的自定義驗證器。請參閱:https://akrabat.com/category/zend-framework-2/ –

相關問題