Введение в Zend Framework

 Learning Zend Framework

appendix

 Zend Framework Reference


  • Zend_Gdata
  • Zend_Http
  • Zend_InfoCard
  • Zend_Json
  • Zend_Layout
  • Zend_Ldap
  • Zend_Loader
  • Zend_Locale
  • Zend_Log
  • Zend_Mail
  • Zend_Markup
  • Zend_Measure
  • Zend_Memory
  • Zend_Mime
  • Zend_Navigation
  • Zend_Oauth
  • Zend_OpenId
  • Zend_Paginator
  • Zend_Pdf
  • Zend_ProgressBar
  • Zend_Queue
  • Zend_Reflection
  • Zend_Registry
  • Zend_Rest

  • Zend_Search_Lucene
  • Zend_Serializer
  • Zend_Server
  • Zend_Service
  • Zend_Session
  • Zend_Soap
  • Zend_Tag
  • Zend_Test
  • Zend_Text
  • Zend_TimeSync
  • Zend_Tool
  • Zend_Tool_Framework
  • Zend_Tool_Project
  • Zend_Translate
  • Zend_Uri
  • Zend_Validate
  • Zend_Version
  • Zend_View
  • Zend_Wildfire
  • Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Ttranslation 27.4% Update 2010-11-28 - Revision 23238 - Version ZF 1.11.x

    75.3. Цепочки валидаторов

    Часто к одному и тому же значению должно быть применено несколько валидаций в определенном порядке. Следующий код демонстрирует способ решения примера из введения, где имя пользователя должно быть длиной от 6 до 12 символов и состоять только из алфавитно-цифровых символов:

    // Создает цепочку валидаторов и добавляет валидаторы в нее
    $validatorChain = new Zend_Validate();
    $validatorChain->addValidator(new Zend_Validate_StringLength(612))
                   ->
    addValidator(new Zend_Validate_Alnum());

    // Валидация имени пользователя
    if ($validatorChain->isValid($username)) {
        
    // имя пользователя прошло валидацию
    } else {
        
    // имя пользователя не прошло валидацию; вывод причин этого
        
    foreach ($validatorChain->getMessages() as $message) {
            echo 
    "$message\n";
        }
    }

    Валидаторы применяются в том же порядке, в котором они были добавлены в Zend_Validate. В примере выше сначала проверяется, находится ли длина имени пользователя в пределах 6-12 символов, затем проверяется, содержит ли имя пользователя только алфавитно-цифровые символы. Вторая проверка проводится независимо от того, была ли успешно пройдена первая проверка. Это означает, что если обе валидации не были пройдены, то getMessages() вернет сообщения об ошибках валидации от обоих валидаторов.

    В некоторых случаях имеет смысл прерывать валидацию, если данные не прошли проверку каким-либо валидатором в цепочке. Zend_Validate обеспечивает эту возможность с помощью второго параметра метода addValidator(). При установке $breakChainOnFailure в TRUE, добавленный валидатор будет прерывать выполнение цепочки валидаций в случае неудачи. Это позволяет избежать выполнения других валидаций, которые были бы излишними или неподходящими в данной ситуации. Ниже приводится переписанный пример, в котором проверка на алфавитно-цифровые символы не должна производиться, если не была пройдена проверка на длину строки:

    $validatorChain->addValidator(new Zend_Validate_StringLength(612), true)
            ->
    addValidator(new Zend_Validate_Alnum());

    Любые объекты, реализующие Zend_Validate_Interface, могут быть использованы в цепочке валидаторов.

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...