Heim >php教程 >PHP开发 >Detaillierte Erläuterung häufig verwendeter Validatoren im Zend Framework

Detaillierte Erläuterung häufig verwendeter Validatoren im Zend Framework

高洛峰
高洛峰Original
2017-01-06 09:59:221434Durchsuche

Dieser Artikel beschreibt gängige Validatoren im Zend Framework anhand von Beispielen. Geben Sie es wie folgt als Referenz an alle weiter:

Datumsvalidator

Code:

<?php
require_once &#39;Zend/Validate/Date.php&#39;;
function c_date($date){
  $validator = new Zend_Validate_Date();
  if($validator->isValid($date)){
    echo "输入的日期格式:";
    echo $date."有效!<p>";
  }else{
    echo "输入的日期格式:";
    echo $date."无效!<p>";
  }
}
$date1 = "2008-02-15";
$date2 = "2008-02-31";
$date3 = "02-15-2008";
c_date($date1);
c_date($date2);
c_date($date3);

Ergebnis:

Eingabedatumsformat: Gültig am 15.02.2008!

Das eingegebene Datumsformat: 31.02.2008 ist ungültig!

Das eingegebene Datumsformat: 15.02.2008 ist ungültig!

Kommentare: Quellcode-Analyse

public function isValid($value)
{
    if (!is_string($value) && !is_int($value) && !is_float($value) &&
      !is_array($value) && !($value instanceof Zend_Date)) {
      $this->_error(self::INVALID);
      return false;
    }
    $this->_setValue($value);
    if (($this->_format !== null) || ($this->_locale !== null) || is_array($value) ||
       $value instanceof Zend_Date) {
      require_once &#39;Zend/Date.php&#39;;
      if (!Zend_Date::isDate($value, $this->_format, $this->_locale)) {
        if ($this->_checkFormat($value) === false) {
          $this->_error(self::FALSEFORMAT);
        } else {
          $this->_error(self::INVALID_DATE);
        }
        return false;
      }
    } else {
      if (!preg_match(&#39;/^\d{4}-\d{2}-\d{2}$/&#39;, $value)) {
        $this->_format = &#39;yyyy-MM-dd&#39;;
        $this->_error(self::FALSEFORMAT);
        $this->_format = null;
        return false;
      }
      list($year, $month, $day) = sscanf($value, &#39;%d-%d-%d&#39;);
      if (!checkdate($month, $day, $year)) {
        $this->_error(self::INVALID_DATE);
        return false;
      }
    }
    return true;
}

InArray-Array enthält Validator

Wenn der Inhalt im Array enthalten ist, wird True zurückgegeben, andernfalls wird False zurückgegeben.

Code:

<?php
require_once &#39;Zend/Validate/InArray.php&#39;;
function c_array($n){
  $temp = array("北京","上海","天津","重庆");
  $validator = new Zend_Validate_InArray($temp);
  if($validator->isValid($n)){
    echo "指定的内容:";
    echo $n.",存在于指定数组中!<p>";
  }else{
    echo "指定的内容:";
    echo $n.",不存在于指定数组中!<p>";
  }
}
$city1 = "北京";
$city2 = "重庆";
$city3 = "郑州";
c_array($city1);
c_array($city2);
c_array($city3);

Ergebnis:

Angegebener Inhalt: Peking, existiert im angegebenen Array!

Der angegebene Inhalt: Chongqing, existiert im angegebenen Array!

Der angegebene Inhalt: Zhengzhou existiert nicht im angegebenen Array!

Regex-Validator für reguläre Übereinstimmungen

Durch die Verwendung regulärer Ausdrücke und die entsprechende Verwendung dieses Validators können fast alle Verifizierungsregeln implementiert werden.

Code:

<?php
require_once "Zend/Validate.php";
function c_rege($v){
  $pattern = array("/ab{2,}/");
  if(Zend_Validate::is($v,"Regex",$pattern)){
    echo "<font color=\"#006600\">指定的内容:";
    echo $v."<p>符合定义的正规规则!</font>";
    echo "<p>";
  }else{
    echo "<font color=\"#ff0000\">指定的内容:";
    echo $v."<p>不符合定义的正规规则!</font>";
    echo "<p>";
  }
}
$temp1 = "ab";
$temp2 = "abb";
$temp3 = "abbb";
c_rege($temp1);
c_rege($temp2);
c_rege($temp3);

Ergebnis:

Angegebener Inhalt: ab

entspricht nicht den definierten formalen Regeln!

Angegebener Inhalt: abb

Entspricht den definierten formalen Regeln!

Angegebener Inhalt: abbb

Entspricht den definierten formalen Regeln!

Kommentare:

public function __construct($pattern)
{
    if ($pattern instanceof Zend_Config) {
      $pattern = $pattern->toArray();
    }
    if (is_array($pattern)) {
      if (array_key_exists(&#39;pattern&#39;, $pattern)) {
        $pattern = $pattern[&#39;pattern&#39;];
      } else {
        require_once &#39;Zend/Validate/Exception.php&#39;;
        throw new Zend_Validate_Exception("Missing option &#39;pattern&#39;");
      }
    }
    $this->setPattern($pattern);
}

Der Konstruktor initialisiert private Eigenschaften und

public function isValid($value)
{
    if (!is_string($value) && !is_int($value) && !is_float($value)) {
      $this->_error(self::INVALID);
      return false;
    }
    $this->_setValue($value);
    $status = @preg_match($this->_pattern, $value);
    if (false === $status) {
      $this->_error(self::ERROROUS);
      return false;
    }
    if (!$status) {
      $this->_error(self::NOT_MATCH);
      return false;
    }
    return true;
}

führt Überprüfungsarbeiten durch.

Schreiben eines benutzerdefinierten Validators

Erben Sie die Zend_Validate_Interface-Schnittstelle, um einen benutzerdefinierten Validator zu implementieren.

Codebeispiel, Funktion zur Bestimmung, ob der angegebene Wert ein Vielfaches von 3 ist.

Schnittstellencode:

<?php
/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category  Zend
 * @package  Zend_Validate
 * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 * @license  http://framework.zend.com/license/new-bsd   New BSD License
 * @version  $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
 */
/**
 * @category  Zend
 * @package  Zend_Validate
 * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 * @license  http://framework.zend.com/license/new-bsd   New BSD License
 */
interface Zend_Validate_Interface
{
  /**
   * Returns true if and only if $value meets the validation requirements
   *
   * If $value fails validation, then this method returns false, and
   * getMessages() will return an array of messages that explain why the
   * validation failed.
   *
   * @param mixed $value
   * @return boolean
   * @throws Zend_Validate_Exception If validation of $value is impossible
   */
  public function isValid($value);
  /**
   * Returns an array of messages that explain why the most recent isValid()
   * call returned false. The array keys are validation failure message identifiers,
   * and the array values are the corresponding human-readable message strings.
   *
   * If isValid() was never called or if the most recent isValid() call
   * returned true, then this method returns an empty array.
   *
   * @return array
   */
  public function getMessages();
}

Um zwei der Methoden zu implementieren, ist eine isValid() und die andere getMessages()

Implementierungscode:

<?php
require_once "Zend/Validate/Interface.php";
class MyValidator implements Zend_Validate_Interface{
  protected $_messages = array();
  public function isValid($value){
    $this->_messages = array();
    $requirement = !($value%3);
    if(!$requirement){
      $this->_messages[] = "&#39;$value&#39;不能被3整除";
      return false;
    }
    return true;
  }
  public function getMessages(){
    return $this->_messages;
  }
}
function c_n_3($n){
  $validator = new MyValidator();
  if($validator->isValid($n)){
    echo "指定的数值:";
    echo $n.",是3的倍数!<p>";
  }else{
    echo "指定的数值:";
    echo $n.",不是3的倍数!<p>";
    echo "失败的消息为:<p>";
    foreach ($validator->getMessages() as $message) {
      echo "$message<p>";
    }
  }
}
$num1 = 5;
$num2 = 6;
$num3 = 8;
c_n_3($num1);
c_n_3($num2);
c_n_3($num3);

Ergebnis:

Angegebener Wert: 5, kein Vielfaches von 3!

Die Fehlermeldung lautet:

'5' ist nicht durch 3 teilbar

Der angegebene Wert: 6, was ein Vielfaches von 3 ist!

Angegebener Wert: 8, kein Vielfaches von 3!

Die Fehlermeldung lautet:

'8' ist nicht durch 3 teilbar

Kommentare:

Hier werden die Attributinformationen durch isValid() festgelegt Methode, über die getMessages()-Methode, um Fehlermeldungen abzurufen. Die Fehlermeldung ist ein Array, das mit der Methode foreach() durchlaufen und gelesen wird.

Ich hoffe, dass dieser Artikel für jedermann bei der PHP-Programmierung auf Basis des Zend Framework-Frameworks hilfreich sein wird.

Ausführlichere Erläuterungen zu häufig verwendeten Validatoren im Zend Framework finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn