Zend Framework - как не ждать загрузки, если какой-то валидатор не работает? - PullRequest
2 голосов
/ 05 октября 2011

у меня есть форма с различными элементами и загрузка файла , иногда пользователю приходится ждать окончания загрузки, чтобы увидеть, что он что-то написал неправильно (какой-то элемент не сделал 'пройти проверку).

Возможно ли, что в случае сбоя какого-либо валидатора в каком-либо элементе формы все остальные валидации прекращаются и форма немедленно возвращается , не дожидаясь окончания загрузки ?

Ответы [ 3 ]

2 голосов
/ 05 октября 2011

Возможно, вы захотите проверить поля формы индивидуально, используя Ajax, перед отправкой формы. Таким образом, пользователи будут получать раннюю обратную связь без дополнительных затрат на загрузку файла.

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

http://www.zendcasts.com/ajaxify-your-zend_form-validation-with-jquery/2010/04/

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

2 голосов
/ 13 октября 2011

Пожалуйста, найдите решение, которое, я думаю, поможет вам

    <?php

class Test_Form_ItemCreate extends Zend_Form {

    public function init() {
        $this->setAction('/test/item/create')
                ->setMethod('post');
        $name = new Zend_Form_Element_Text('SellerName');
        $name->setLabel('Name:')
                ->setOptions(array('size' => '35'))
                ->setRequired(true)
                ->addFilter('StringTrim');

//handling images..   
        $images = new Zend_Form_Element_File('images');
        $images->setMultiFile(3)
                ->addValidator('IsImage')
                ->addValidator('Size', false, '204800')
                ->addValidator('Extension', false, 'jpg,png,gif')
                ->addValidator('ImageSize', false, array(
                    'minwidth' => 150,
                    'minheight' => 150,
                    'maxwidth' => 150,
                    'maxheight' => 150
                ))
                ->setValueDisabled(true);//the value will not be available.. while checking the file is valid or not.this is very important

        // attach element to form    
        $this->addElement($images);
        $this->addElement($name);
    }

}

class Test_ItemController extends Zend_Controller_Action {

    public function createAction() {
        // generate input form
        $form = new Test_Form_ItemCreate;
        $this->view->form = $form;
        if ($this->getRequest()->isPost()) {
            if ($form->isValid($this->getRequest()->getPost())) {

                //moving of files if it is valid only
                $form->images->setDestination('/tmp/uploads');
                $adapter = $form->images->getTransferAdapter();
                for ($x = 0; $x < $form->images->getMultiFile(); $x++) {
                    $xt = @pathinfo($adapter->getFileName('images_' . $x . '_'), PATHINFO_EXTENSION);
                    $adapter->clearFilters();
                    $adapter->addFilter('Rename', array(
                        'target' => sprintf('%d_%d.%s', $id, ($x + 1), $xt),
                        'overwrite' => true
                    ));
                    $adapter->receive('images_' . $x . '_');
                }

                $this->_helper->getHelper('FlashMessenger')->addMessage('Your submission has been accepted as item #' . $id . '. A moderator will review it and, if approved, it will appear on the site within 48 hours.');
                $this->_redirect('/test/item/success');
            }
        }
    }

}

Обратите внимание на setValueDisabled (true) в Test_Form_ItemCreate

1 голос
/ 05 октября 2011

Да, конечно.

  • Используйте проверку Javascript в дополнение к проверке на стороне сервера (никогда не используйте только проверку js).С проверкой Javascript вы можете мгновенно предоставить обратную связь с пользователем, даже при заполнении определенного поля формы.
  • Разорвать цепочку проверки Zend_Form, передав TRUE в качестве второго параметра при добавлении валидаторов в форму, например, $element->addValidator('alnum', true).TRUE означает, что проверка формы немедленно вернется.
...