Введение в 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. Zend_Validate

    Содержание

    75.1. Введение
    75.1.1. Что такое валидатор?
    75.1.2. Базовое использование валидаторов
    75.1.3. Установка собственных сообщений от ошибках
    75.1.4. Использование статического метода is()
    75.1.5. Перевод сообщений
    75.2. Standard Validation Classes
    75.2.1. Alnum
    75.2.1.1. Supported options for Zend_Validate_Alnum
    75.2.1.2. Basic usage
    75.2.1.3. Using whitespaces
    75.2.1.4. Using different languages
    75.2.2. Alpha
    75.2.2.1. Supported options for Zend_Validate_Alpha
    75.2.2.2. Basic usage
    75.2.2.3. Using whitespaces
    75.2.2.4. Using different languages
    75.2.3. Barcode
    75.2.3.1. Supported options for Zend_Validate_Barcode
    75.2.3.2. Basic usage
    75.2.3.3. Optional checksum
    75.2.3.4. Writing custom adapters
    75.2.4. Between
    75.2.4.1. Supported options for Zend_Validate_Between
    75.2.4.2. Default behaviour for Zend_Validate_Between
    75.2.4.3. Validation exclusive the border values
    75.2.5. Callback
    75.2.5.1. Supported options for Zend_Validate_Callback
    75.2.5.2. Basic usage
    75.2.5.3. Usage with closures
    75.2.5.4. Usage with class-based callbacks
    75.2.5.5. Adding options
    75.2.6. CreditCard
    75.2.6.1. Supported options for Zend_Validate_CreditCard
    75.2.6.2. Basic usage
    75.2.6.3. Accepting defined credit cards
    75.2.6.4. Validation by using foreign APIs
    75.2.7. Ccnum
    75.2.8. Date
    75.2.8.1. Supported options for Zend_Validate_Date
    75.2.8.2. Default date validation
    75.2.8.3. Localized date validation
    75.2.8.4. Self defined date validation
    75.2.9. Db_RecordExists and Db_NoRecordExists
    75.2.9.1. Supported options for Zend_Validate_Db_*
    75.2.9.2. Basic usage
    75.2.9.3. Excluding records
    75.2.9.4. Database Adapters
    75.2.9.5. Database Schemas
    75.2.10. Digits
    75.2.10.1. Supported options for Zend_Validate_Digits
    75.2.10.2. Validating digits
    75.2.11. EmailAddress
    75.2.11.1. Basic usage
    75.2.11.2. Options for validating Email Addresses
    75.2.11.3. Complex local parts
    75.2.11.4. Validating only the local part
    75.2.11.5. Validating different types of hostnames
    75.2.11.6. Checking if the hostname actually accepts email
    75.2.11.7. Validating International Domains Names
    75.2.11.8. Validating Top Level Domains
    75.2.11.9. Setting messages
    75.2.12. Float
    75.2.12.1. Supported options for Zend_Validate_Float
    75.2.12.2. Simple float validation
    75.2.12.3. Localized float validation
    75.2.13. GreaterThan
    75.2.13.1. Supported options for Zend_Validate_GreaterThan
    75.2.13.2. Basic usage
    75.2.14. Hex
    75.2.14.1. Supported options for Zend_Validate_Hex
    75.2.15. Hostname
    75.2.15.1. Supported options for Zend_Validate_Hostname
    75.2.15.2. Basic usage
    75.2.15.3. Validating different types of hostnames
    75.2.15.4. Validating International Domains Names
    75.2.15.5. Validating Top Level Domains
    75.2.16. Iban
    75.2.16.1. Supported options for Zend_Validate_Iban
    75.2.16.2. IBAN validation
    75.2.16.2.1. Application wide locale
    75.2.16.2.2. Ungreedy IBAN validation
    75.2.16.2.3. Region aware IBAN validation
    75.2.17. Identical
    75.2.17.1. Supported options for Zend_Validate_Identical
    75.2.17.2. Basic usage
    75.2.17.3. Identical objects
    75.2.17.4. Form elements
    75.2.17.5. Strict validation
    75.2.17.6. Configuration
    75.2.18. InArray
    75.2.18.1. Supported options for Zend_Validate_InArray
    75.2.18.2. Simple array validation
    75.2.18.3. Strict array validation
    75.2.18.4. Recursive array validation
    75.2.19. Int
    75.2.19.1. Supported options for Zend_Validate_Int
    75.2.19.2. Simple integer validation
    75.2.19.3. Localized integer validation
    75.2.20. Ip
    75.2.20.1. Supported options for Zend_Validate_Ip
    75.2.20.2. Basic usage
    75.2.20.3. Validate IPv4 or IPV6 alone
    75.2.21. Isbn
    75.2.21.1. Supported options for Zend_Validate_Isbn
    75.2.21.2. Basic usage
    75.2.21.3. Setting an explicit ISBN validation type
    75.2.21.4. Specifying a separator restriction
    75.2.22. LessThan
    75.2.22.1. Supported options for Zend_Validate_LessThan
    75.2.22.2. Basic usage
    75.2.23. NotEmpty
    75.2.23.1. Supported options for Zend_Validate_NotEmpty
    75.2.23.2. Default behaviour for Zend_Validate_NotEmpty
    75.2.23.3. Changing behaviour for Zend_Validate_NotEmpty
    75.2.24. PostCode
    75.2.24.1. Constructor options
    75.2.24.2. Supported options for Zend_Validate_PostCode
    75.2.25. Regex
    75.2.25.1. Supported options for Zend_Validate_Regex
    75.2.25.2. Validation with Zend_Validate_Regex
    75.2.25.3. Pattern handling
    75.2.26. Sitemap Validators
    75.2.26.1. Sitemap_Changefreq
    75.2.26.2. Sitemap_Lastmod
    75.2.26.3. Sitemap_Loc
    75.2.26.4. Sitemap_Priority
    75.2.26.5. Supported options for Zend_Validate_Sitemap_*
    75.2.27. StringLength
    75.2.27.1. Supported options for Zend_Validate_StringLength
    75.2.27.2. Default behaviour for Zend_Validate_StringLength
    75.2.27.3. Limiting the maximum allowed length of a string
    75.2.27.4. Limiting the minimal required length of a string
    75.2.27.5. Limiting a string on both sides
    75.2.27.6. Encoding of values
    75.3. Цепочки валидаторов
    75.4. Написание валидаторов
    75.5. Validation Messages
    75.5.1. Using pre-translated validation messages
    75.5.2. Limit the size of a validation message

    75.1. Введение

    Компонента Zend_Validate предоставляет набор наиболее часто используемых валидаторов. Она также предоставляет простой механизм формирования цепочки валидаторов, посредством которого к одним и тем же данным может быть применено несколько валидаторов в порядке, заданном пользователем.

    75.1.1. Что такое валидатор?

    Валидатор проверяет входные данные на предмет соответствия требованиям и возвращает результат булевого типа. Если входные данные не соответствуют требованиям, то валидатор может предоставить информацию о том, какому требованию (требованиям) не соответствуют входные данные.

    Например, веб-приложение может требовать, чтобы имя пользователя было длиной от 6 до 12 символов и содержало только алфавитно-цифровые символы. Для того, чтобы проверить, соответствует ли имя пользователя этим требованиям, можно использовать валидатор. Если выбранное имя пользователя не соответствует одному из требований (или обоим требованиям), то будет также полезно знать, каким именно требованиям не соответствует имя пользователя.

    75.1.2. Базовое использование валидаторов

    Такое определение валидации дает основу для Zend_Validate_Interface, который определяет два метода - isValid() и getMessages(). Метод isValid() выполняет валидацию переданного значения, возвращая TRUE тогда и только тогда, когда значение прошло проверку по критериям валидации.

    Если isValid() возвращает FALSE, то getMessages() возвращает массив сообщений, поясняющих, по каким причинам валидация не была пройдена. Ключи массива являются короткими строками, идентифицирующими причины, по которым не была пройдена валидация. Значения массива являются строками сообщений, понятных человеку. Ключи и значения зависят от класса валидатора - каждый класс валидатора определяет собственный набор сообщений об ошибке и уникальных ключей-идентификаторов. Каждый класс также определяет константы, соответствующие идентификаторам причин, по которым валидация не была пройдена.

    [Замечание] Замечание

    Метод getMessages() возвращает сообщения ошибок валидации только для последнего вызова isValid(). Любой вызов метода isValid() стирает все сообщения и ошибки с его прошлого вызова, т.к. вероятно, что отдельные вызовы isValid() производятся для различных входных значений.

    Следующий пример демонстрирует проверку адреса e-mail:

    $validator = new Zend_Validate_EmailAddress();

    if (
    $validator->isValid($email)) {
        
    // email прошел валидацию
    } else {
        
    // email не прошел валидацию; вывод причин этого
        
    foreach ($validator->getMessages() as $messageId => $message) {
            echo 
    "Validation failure '$messageId': $message\n";
        }
    }

    75.1.3. Установка собственных сообщений от ошибках

    Классы валидации предоставляют метод setMessage(), с помощью которого вы можете устанавливать формат сообщения, возвращаемого методом getMessages() в случае, если валидация не была пройдена. Первый аргумент этого метода является строкой, содержащей текст сообщения об ошибке. Вы можете включать в нее маркеры, которые будут замещаться данными, относящимися к валидатору. Маркер %value% поддерживается всеми валидаторами, он заменяется значением, который вы передали методу isValid(). Другие маркеры могут поддерживаться не во всех валидаторах. Например, %max% является маркером, поддерживаемым валидатором Zend_Validate_LessThan. Метод getMessageVariables() возвращает массив маркеров, поддерживаемых валидатором.

    Второй необязательный аргумент является строкой, которую нужно установить в качестве идентификатора шаблона сообщения, это может быть полезным в том случае, когда класс валидации предусматривает несколько причин, по которым валидация может быть не пройдена. Если вы опустите второй аргумент, то setMessage() предполагает, что переданное вами сообщение должно использоваться в качестве первого шаблона сообщения, объявленного в классе валидации. Многие классы валидации имеют только один шаблон сообщения об ошибке, поэтому в большинстве случаев нет необходимости указывать, какой именно шаблон требуется изменить.

    $validator = new Zend_Validate_StringLength(8);

    $validator->setMessage(
        
    'Строка \'%value%\' слишком короткая. Она должна быть длиной как минимум ' .
        
    '%min% символов',
        
    Zend_Validate_StringLength::TOO_SHORT);

    if (!
    $validator->isValid('слово')) {
        
    $messages $validator->getMessages();
        echo 
    current($messages);

        
    // "Строка 'слово' слишком короткая. Она должна быть длиной как минимум
        // 8 символов"
    }

    Вы можете устанавливать несколько сообщений сразу, используя метод setMessages(). Его аргумент является массивом, содержащим пары ключ/значение.

    $validator = new Zend_Validate_StringLength(812);

    $validator->setMessages( array(
        
    Zend_Validate_StringLength::TOO_SHORT =>
            
    'Строка \'%value%\' слишком короткая',
        
    Zend_Validate_StringLength::TOO_LONG  =>
            
    'Строка \'%value%\' слишком длинная'
    ));

    Если ваше приложение требует большей гибкости, ... то вы можете использовать доступ к свойствам под теми же именами, что и метки сообщения, поддерживаемые данным классом валидации. Свойство value всегда доступно в валидаторах, это значение, которое вы передали в качестве аргумента метода isValid(). Другие свойства могут поддерживаться не всеми классами валидации.

    $validator = new Zend_Validate_StringLength(812);

    if (!
    validator->isValid('слово')) {
        echo 
    'Слово не прошедшее проверку: '
            
    $validator->value
            
    '; его длина не находится в диапазоне между '
            
    $validator->min
            
    ' и '
            
    $validator->max
            
    " символами\n";
    }

    75.1.4. Использование статического метода is()

    Если неудобно каждый раз загружать требуемый класс валидации и создавать его экземпляр, то можно использовать статический метод Zend_Validate::is() в качестве альтернативного способа вызова. Первый аргумент этого метода является входным значением, которое вы передавали бы методу isValid(). Второй аргумент является строкой, которая соответствует базовому имени класса валидации относительно пространства имен Zend_Validate. Метод is() автоматически загружает класс, создает его экземпляр и применяет метод isValid() к входным данным.

    if (Zend_Validate::is($email'EmailAddress')) {
        
    // Да, похоже, email валиден
    }

    Вы можете также передавать массив аргументов конструктора, если они нужны для данного класса валидации.

    if (Zend_Validate::is($value'Between', array(112))) {
        
    // Да, $value имеет значение в диапазоне между 1 и 12
    }

    Метод is() возвращает значение булевого типа, как и метод isValid(). При использовании статического метода is() сообщения ошибки валидации не доступны.

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

    Кроме того, класс Zend_Filter_Input позволяет инстанцировать и запускать более одного класса фильтра и валидации для обработки набора входных данных. Читайте Раздел 34.5, «Zend_Filter_Input».

    75.1.5. Перевод сообщений

    Классы валидации предоставляют метод setTranslator(), с помощью которого вы можете устанавливать экземпляр класса Zend_Translate, который будет переводить сообщения в случае ошибки валидации. Метод getTranslator() возвращает установленный экземпляр переводчика.

    $validator = new Zend_Validate_StringLength(812);
    $translate = new Zend_Translate(
        
    'array',
        array(
    Zend_Validate_StringLength::TOO_SHORT => 'Translated \'%value%\''),
        
    'en'
    );

    $validator->setTranslator($translate);

    С помощью статического метода setDefaultTranslator() вы можете установить экземпляр Zend_Translate, который будет использоваться во всех классах валидации, и извлекать его с помощью getDefaultTranslator(). Это избавляет от установки вручную переводчика для всех классов валидации и упрощает ваш код.

    $translate = new Zend_Translate(
        
    'array',
        array(
    Zend_Validate_StringLength::TOO_SHORT => 'Translated \'%value%\''),
        
    'en'
    );
    Zend_Validate::setDefaultTranslator($translate);
    [Замечание] Замечание

    Если вы установили глобальную для всего приложения локаль через Zend_Registry, то эта локаль будет использоваться по умолчанию в переводчике.

    Иногда бывает необходимым отключить переводчика в валидаторе. Для этого используйте метод setDisableTranslator(), который принимает булево значение. Для получения установленного значения используйте translatorIsDisabled().

    $validator = new Zend_Validate_StringLength(812);
    if (!
    $validator->isTranslatorDisabled()) {
        
    $validator->setDisableTranslator();
    }

    Вы можете также использовать переводчика вместо установки собственных сообщений через метод setMessage(). Но при этом имейте в виду, что переводчик обрабатывает и сообщения, которые вы установили самостоятельно.

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...