Hi again,

Just following up on the issue I previously described to see if someone can
confirm the issue and to see if there's a different(better) solution for it.
It's a problem that need to be solved before I can upgrade our application
to 1.9.x because it messes with our custom error messages and translations.

Thank you in advance for your help.

Martin Carpentier


On Thu, Sep 3, 2009 at 17:19, Martin Carpentier <carpentier.mar...@gmail.com
> wrote:

> Hi,
>
> since the modification made to Zend_Validate_NotEmpty in ZF 1.9.0 (checking
> the value for valid types) radio buttons set with the required flags don't
> return the proper error message if submitted without any of its options
> checked.
>
> here's a simple example to recreate the problem:
>
> // in a TestController
> public function testAction()
> {
>     $request = $this->getRequest();
>
>     $form = new Zend_Form();
>     $form->setAction('/test/test')
>          ->setName('formTest')
>     ;
>
>     $options = array(
>         'no'    => 'no',
>         'yes'  => 'yes',
>     );
>
>     $form->addElement('Radio', 'testRadio', array(
>         'label'        => "test ?",
>         'required'     => true,
>         'multiOptions' => $options,
>     ));
>
>     $form->addElement('Submit', 'suivant', array(
>         'required' => false,
>         'ignore'   => true,
>         'label'    => 'submit test',
>     ));
>
>     if ($this->getRequest()->isPost()) {
>         if ($form->isValid($request->getPost())) {
>             Zend_Debug::dump($form);
>         }
>     }
>
>     $this->view->form = $form;
> }
>
> Now, when submitting the form without selecting any option, we get the
> invalid message: "Invalid type given, value should be float, string, or
> integer"
> Before 1.9.0 we would get the correct and expected message: "Value is
> required and can't be empty"
>
> The problem is caused by the addition of those lines in
> Zend_Validate_NotEmpty:
>
> if (!is_string($value) && !is_int($value) && !is_float($value) &&
> !is_bool($value)) {
>     $this->_error(self::INVALID);
>     return false;
> }
>
> With that check in place, a null $value would get flagged as being of an
> INVALID type
> A fix would be to check also that the value is not null like this:
>
> if (null !== $value && !is_string($value) && !is_int($value) &&
> !is_float($value) && !is_bool($value)) {
>     $this->_error(self::INVALID);
>     return false;
> }
>
> Let me know if I should submit a bug report... or if I shouldn't be
> expecting that behavior anymore.
>
> Martin Carpentier
>

Reply via email to