Zend Framework学習の検証ing
19375 ワード
setMessageによるエラー情報のカスタマイズ
コード:
結果:
入力したE-mailアドレス:[email protected]有効!
入力E-mailアドレス:abc#123.com無効!失敗メッセージ:
abc#123.comが規格に合わないE-mailアドレスフォーマット
コメント:
機能は、setMessageメソッドでご希望のヒント情報を設定します.
静的メソッドis()
役割:is()メソッドで直接検証器を作成し、毎回newに行かずに作成します.
構文:
Zend_Validate::is($value,$classBaseName,$args);
コード:
結果:
入力値:5
10と40の間ではありません!
入力値:22
10と40の間に!
コメント:ソースコードを見てみましょう.
ソースコードがやっていることは、クラスを導入し、条件を導入し、判断し、結果を返すことです.不思議です.やや複雑です.ニマ、PHPを見くびってはいけない.こんなに上手に運用できて、感心しました.
チェッカチェーンaddValidator()の使用
チェッカチェーンは、複数のチェッカの接続です.すべてのチェックルールが通過すると、True値が返されます.
コード:
結果:
入力した値:123456は無効です.失敗メッセージ:
'123456' is less than 8 characters long
入力した値:!@#$%^&*()無効です.失敗メッセージ:
'!@#$%^&*()' contains characters which are non alphabetic and no digits
入力した値:abcdefgh有効!
コメント:
内部の奥義を見てみましょう
addValidator()メソッドは、オブジェクトをプライベート変数_に格納します.validatorsでは、
検証するときは、遍歴検証すればいいです.
コード:
<?php
require_once 'Zend/Validate/EmailAddress.php';
function c_email($email)
{
$validator = new Zend_Validate_EmailAddress();
$validator->setMessage(
"%value% E-mail "
);
if($validator->isValid($email)){
echo " E-mail :";
echo $email." !<p>";
}else{
echo " E-mail :";
echo $email." !";
echo " :<p>";
$message = $validator->getMessages();
echo $message['emailAddressInvalidFormat'];
}
}
$e_m1 = "[email protected]";
$e_m2 = "abc#123.com";
c_email($e_m1);
c_email($e_m2);
結果:
入力したE-mailアドレス:[email protected]有効!
入力E-mailアドレス:abc#123.com無効!失敗メッセージ:
abc#123.comが規格に合わないE-mailアドレスフォーマット
コメント:
機能は、setMessageメソッドでご希望のヒント情報を設定します.
静的メソッドis()
役割:is()メソッドで直接検証器を作成し、毎回newに行かずに作成します.
構文:
Zend_Validate::is($value,$classBaseName,$args);
コード:
<?php
require_once 'Zend/Validate.php';
function c_num($num){
if(Zend_Validate::is($num,'Between',array(10,40)))// is() ,
{
echo "<font color=\"#006600\"> :";
echo $num."<p> 10 40 !</font>";
echo "<p>";
}else{
echo "<font color=\"#ff0000\"> :";
echo $num."<p> 10 40 !</font>";
echo "<p>";
}
}
$num1 = 5;
$num2 = 22;
c_num($num1);
c_num($num2);
結果:
入力値:5
10と40の間ではありません!
入力値:22
10と40の間に!
コメント:ソースコードを見てみましょう.
public static function is($value, $classBaseName, array $args = array(), $namespaces = array())
{
$namespaces = array_merge((array) $namespaces, self::$_defaultNamespaces, array('Zend_Validate'));
$className = ucfirst($classBaseName);
try {
if (!class_exists($className, false)) {
require_once 'Zend/Loader.php';
foreach($namespaces as $namespace) {
$class = $namespace . '_' . $className;
$file = str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';
if (Zend_Loader::isReadable($file)) {
Zend_Loader::loadClass($class);
$className = $class;
break;
}
}
}
$class = new ReflectionClass($className);
if ($class->implementsInterface('Zend_Validate_Interface')) {
if ($class->hasMethod('__construct')) {
$keys = array_keys($args);
$numeric = false;
foreach($keys as $key) {
if (is_numeric($key)) {
$numeric = true;
break;
}
}
if ($numeric) {
$object = $class->newInstanceArgs($args);
} else {
$object = $class->newInstance($args);
}
} else {
$object = $class->newInstance();
}
return $object->isValid($value);
}
} catch (Zend_Validate_Exception $ze) {
// if there is an exception while validating throw it
throw $ze;
} catch (Exception $e) {
// fallthrough and continue for missing validation classes
}
require_once 'Zend/Validate/Exception.php';
throw new Zend_Validate_Exception("Validate class not found from basename '$classBaseName'");
}
ソースコードがやっていることは、クラスを導入し、条件を導入し、判断し、結果を返すことです.不思議です.やや複雑です.ニマ、PHPを見くびってはいけない.こんなに上手に運用できて、感心しました.
チェッカチェーンaddValidator()の使用
チェッカチェーンは、複数のチェッカの接続です.すべてのチェックルールが通過すると、True値が返されます.
コード:
<?php
require_once 'Zend/Validate.php';
require_once 'Zend/Validate/StringLength.php';
require_once 'Zend/Validate/Alnum.php';
function c_content($value){
$v_Chain = new Zend_Validate();
$v_Chain->addValidator(new Zend_Validate_StringLength(8,12))
->addValidator(new Zend_Validate_Alnum());
if($v_Chain->isValid($value)){
echo " :";
echo $value." !";
}else{
echo " :";
echo $value." !";
echo " :<p>";
foreach($v_Chain->getMessages() as $message){
echo "$message<p>";
}
}
}
$temp1 = "123456";
$temp2 = "!@#$%^&*()";
$temp3 = "abcdefgh";
c_content($temp1);
c_content($temp2);
c_content($temp3);
結果:
入力した値:123456は無効です.失敗メッセージ:
'123456' is less than 8 characters long
入力した値:!@#$%^&*()無効です.失敗メッセージ:
'!@#$%^&*()' contains characters which are non alphabetic and no digits
入力した値:abcdefgh有効!
コメント:
内部の奥義を見てみましょう
public function addValidator(Zend_Validate_Interface $validator, $breakChainOnFailure = false)
{
$this->_validators[] = array(
'instance' => $validator,
'breakChainOnFailure' => (boolean) $breakChainOnFailure
);
return $this;
}
addValidator()メソッドは、オブジェクトをプライベート変数_に格納します.validatorsでは、
public function isValid($value)
{
$this->_messages = array();
$this->_errors = array();
$result = true;
foreach ($this->_validators as $element) {
$validator = $element['instance'];
if ($validator->isValid($value)) {
continue;
}
$result = false;
$messages = $validator->getMessages();
$this->_messages = array_merge($this->_messages, $messages);
$this->_errors = array_merge($this->_errors, array_keys($messages));
if ($element['breakChainOnFailure']) {
break;
}
}
return $result;
}
検証するときは、遍歴検証すればいいです.