2011-08-30 27 views
3

我使用這個建設我的元素:Zend框架 - 如何讓空字段的表單元素

$freetext = $this->CreateElement('textarea', 'freetext') 
      ->setLabel('Comments') 
      ->setAttrib('class','input-textarea') 
      ->setOptions(array('rows' => '2', 'cols'=>'30')) 
      ->addValidator('StringLength', false, array(0,500)) 
      ->addFilter('HtmlEntities') 
      ->addFilter('StripTags') 
      ->setRequired(true); 

我想一個「allowEmpty」添加到這一點,但無法找到正確的語法。我希望有這樣的東西:

... ->addValidator('allowEmpty', false, true) 

但這不起作用。

編輯:我已將setRequired()更改爲true - 我想允許將空字符串作爲require字段的可接受值。

無論用法如何,我該如何將這個選項添加到我的元素?

+1

你能不能改變你的驗證器' - > addValidator(「StringLength」,虛假,陣列(0,500)) '? – ChrisA

+0

是的,但是如何添加此選項呢? – Owen

+0

我很困惑。爲什麼你需要使用setRequired(true)?如果將其設置爲false並添加驗證程序,它就會完全按照您希望的方式進行操作:如果它爲空或驗證正確,它將起作用。如果它沒有任何驗證,儘管setRequired爲false,表單仍未提交。 – riku

回答

3
$freetext = $this->CreateElement('textarea', 'freetext') 
      ->addValidator('StringLength', false, array(10,500)) 
      ->setRequired(false); 

您的代碼應該已經這樣做,setRequired(false)方法做你問什麼,也就是說,如果沒有遂以值校驗器將無法運行。

你有你寫的代碼,一些驗證錯誤信息或其他什麼東西的任何問題?

更新

我已經改變了setRequired()來真的 - 我想允許空字符串作爲一個需要現場的可接受值。

setRequired(true)中的語義是什麼,並允許將空字符串作爲有效值?或者,如果元素可以是空的,那麼你需要什麼?

你在編輯中所要求的是沒有意義的,因爲如果一個元素是必需的,它必須有一個不同於空字符串的值。如果您需要接受空字符串作爲有效值,請使用setRequired(false)。當你的形式與價值或Zend_Form::getValues()Zend_Form_Element::getValue()會得到空字符串作爲結果。

反正這裏它是setRequired解釋和setAllowEmptyfrom ZF manual

使用默認值,而沒有經過值,或 傳遞一個空字符串,它驗證一個元素,跳過所有驗證和驗證,以 TRUE 。

  • 器setAllowEmpty(假)留下兩個其他提到的標誌 不變,將驗證對您 此元素定義的校驗器鏈,無論()傳遞給isValid的價值。

  • setRequired(真)留下兩個其他提到的標誌不變, 將增加在驗證鏈(如果沒有 已經設置))之上的「NotEmpty」校驗,與$ breakChainOnFailure標誌設置。這 行爲借給所需的標誌語義含義:如果沒有值通過, 我們立即使提交無效並通知用戶,並且 阻止其他驗證器運行我們已知的是無效數據 。

如果不希望這種行爲,你可以通過一個 FALSE值setAutoInsertNotEmptyValidator($標誌)將其關閉;這將使 阻止isValid()將'NotEmpty'驗證程序置於 驗證程序鏈中。

+0

我編輯了我的問題。我很想知道是否可以將此選項添加到我的元素,因爲在另一種情況下我可能會發現它更好用。 – Owen

+0

@Owen我已更新我的答案以反映您的修改。 – Fabio

+0

@Fabio我和@Owen一樣。我必須檢查三個表單字段中的一個是否填充了數據。我寫了一個自定義的驗證器來檢查這個,但是他沒有被解僱,因爲我需要添加'required => true'來使驗證器工作。但是,在驗證者被解僱之前,字段必須是空的。這是'setAllowEmpty()'方便的情況。 – piotrekkr

5

- > setRequired(false);

如果你想允許一個空字符串並將一個空字符串保存到數據庫,這就足夠了。

如果您希望字段是可選的,並保持在數據庫空值,如果不給,添加:

->addFilter(new Zend_Filter_Null) 
+1

感謝您的過濾器。在您評論3年後保存我的一天。 – smozgur

+0

你做了我的一天。我正在尋找這麼久...... – frgtv10

+1

對於每個人來說,現在到了這一點: 在Zend Framework 3中,類被稱爲'ToNull',可以設置爲過濾器 – rogaa

相關問題