Значение по умолчанию для Zend_Form_Element_Select

Я до сих пор остаюсь частью того, что из-за того, что эта вещь Zend представляет собой ужасный беспорядок, который кое-кто сам себе прощает на более поздней стадии, но он не следует структуре, и документация ужасна, что всегда приводит меня к удачному месту, которое является переполнением стека.

Так что моя проблема в том, что я пытаюсь инициализировать <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"); 

PS Я не против изменить ситуацию и использовать лучшую методологию.

2 ответа

Решение

Как насчет использования Zend_Validate_InArray вместо этого? Это позволит избежать необходимости отрицать регулярное выражение (что всегда немного сложно).

В вашем случае это было бы что-то вроде

$channel->addValidator('inArray', true, array("BBC" => "BBC", "Channel 4" => "Channel 4"));

Надеюсь, это поможет,

Таким образом, вы хотите, чтобы поле выбора было необязательным, но у вас есть setRequired(true)? Это не звучит правильно.

В любом случае, если у вас есть несколько вариантов, если выбрано "Пожалуйста, выберите один", вы получите значение "Пожалуйста, выберите один". Я верю, что вы хотите:

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

Глядя на часть моего кода, когда я хочу пустой элемент, я создаю свой массив опций следующим образом:

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

Так что, в основном, запуск мультиопций с пустого места.

Другие вопросы по тегам