2016-05-12 54 views
1

當我動態構建表單元素時,我希望能夠通過自定義驗證規則檢查並查看是否需要表單字段。問題是,當我添加自定義驗證規則時,它強制該字段不爲空。如果我允許該字段爲空,它不會檢查我的自定義驗證器,除非在該字段中輸入內容。CakePHP 3.x自定義驗證字段必需

如何根據需要檢查回撥是否允許字段?

在我SubmissionsTable

public function validationDefault(Validator $validator) 
{ 
     $validator 
     ->add("custom_value_q", [ 
      "custom" => [ 
       "rule" => [$this, "customFieldIsRequired"], 
       "message" => "Message Here" 
        ] 
       ] 
      ); 
    return $validator; 
}  

public function customFieldIsRequired($value, $context) 
{ 
//logic here 
return true; 
} 

回答

1

在您的自定義一個空當傳遞$ value中應該做的伎倆返回true。

如果您希望字段允許空字符串(=空),那麼在頂部使用allowBlank('custom_value_q'),邏輯上不需要調用自定義驗證器函數,這就是爲什麼它被繞過空案件。

// UPDATE 但是,您可以選擇爲allowEmpty()提供回調,如果您真的需要它,應該可以僅調用自定義驗證規則(如果該字段需要經驗證是因爲非空白)。

$validator->allowEmpty('fieldname', function ($context) { return !isset($context['data']['description']) || $context['data']['description'] !== ''; });

+1

馬克,這就是我已經設置。我在自定義函數中返回true(用於測試),並且當沒有輸入任何內容時,字段仍然無法驗證(除非用戶輸入某些數據,否則甚至不調用自定義驗證器函數)。我希望能夠在我的自定義函數中確定該字段是否允許爲空。我也嘗試了allowBlank,但得到'未定義的方法'。任何其他想法? – wilsmex

+1

任何其他想法?我似乎無法弄清楚這一點。 – wilsmex

+0

我非常渴望這個問題的答案以及@wilsmex。花了幾個小時與驗證者作戰之後,我開始了這個事情,這只是Cake中的一個錯誤,並且令人沮喪的是對這些問題的關注很少。 – theraccoonbear