Zend_Form_Element_Select上的默认值

时间:2011-11-15 10:07:21

标签: php zend-framework zend-form-element

我仍然有一部分东西,这个Zend的东西是一个可怕的混乱,有些人在后期如何原谅它自己,但它没有结构,文件很可怕,这总是把我带到一个幸运的地方,是 stackoverflow

所以我的问题是,我试图初始化<select>并且我希望默认值为Please Choose One,如果用户最终选择Please Choose One作为值,我想要抛出错误。我这样做的方式是有效的,因为我不能对正则表达式进行负面匹配, 或者我可以吗?

$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我不介意改变方法并使用更好的方法。

2 个答案:

答案 0 :(得分:2)

使用Zend_Validate_InArray怎么样?它将避免需要否定正则表达式(这总是有点棘手)。

在你的情况下,它会像

  

$ channels-&gt; addValidator('inArray',true,array(“BBC”=&gt;“BBC”,   “频道4”=&gt; “频道4”));

希望有所帮助,

答案 1 :(得分:1)

所以你希望选择框是可选的,但你有setRequired(true)?这听起来不对。

在任何情况下,如果选择“请选择一个”,您的多重选项中的值为“请选择一个”。我相信你想要:

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

查看我的一些代码,当我想要一个空白项目时,我正在创建我的选项数组:

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

所以基本上用空白点开始多选项。