2011-11-15 46 views
1

我仍然有一部分是這個Zend的事情是一個可怕的混亂,一些如何原諒自己在後期階段,但它沒有結構和文件是可怕的,這總是讓我這是一個幸運的地方,它是stackoverflowZend_Form_Element_Select上的默認值

所以我的問題是,我嘗試初始化<select>,我想有Please Choose One默認值,如果用戶最終選擇Please Choose One作爲一種價值,我想拋出一個錯誤。我做這件事的方式dosent工作,因爲我不能否定匹配正則表達式,或者我可以嗎?

$pubs = array(
     "Please Choose One" => "Please Choose One", 
     "BBC" => "BBC", 
     "Channel 4" => "Channel 4" 
); 

$channels = new Zend_Form_Element_Select("publication"); 
$channels->setLabel("Channels") 
    ->setRequired(true) 
    ->addMultiOptions($pubs) 
    ->addValidator('regex', true, array(
      "pattern" => "/Please Choose One/", 
      "messages" => array("regexNotMatch" => "Please choose a publisher") 
     ) 
    ) 
    ->setValue("Please Choose One"); 

P.S我不介意身邊改變的事情,用更好的方法。

+0

簡單的辦法是設置defaut選項「」的值,並設置一個'notEmpty'驗證 –

回答

2

怎麼樣用Zend_Validate_InArray代替?這將避免否定正則表達式(這總是有點棘手)。

在你的情況下,它會像

$通道 - > addValidator( 'inArray',真的,陣列( 「BBC」=> 「BBC」, 「4頻道」=>「頻道4「));

希望幫助,

+0

工程就像一個魅力,正是我在尋找 –

1

所以你想選擇框是可選的,但你有setRequired(true)?這聽起來不對。

無論如何,在多選項中,如果選擇「請選擇一個」,則您的值爲「請選擇一個」。我相信你想要的:

$pubs = array(
    null   => "Please Choose One", 
    "BBC"  => "BBC", 
    "Channel 4" => "Channel 4" 
); 

看着我的一些代碼,當我想一個空白的項目,我創建了我的選擇陣列像這樣:

$multiOptions = array(); 
if (!$options->required) $multiOptions[] = false; 

所以基本上開始multioptions出與一個空白點。

+0

'null'作爲索引不工作。這似乎有點奇怪 –

+0

我明白你的意思,通過留下第一個元素爲假。我想你需要給一個更大的片段來真正理解你的意思 –