Колесные диски Replica MB50 Mercedes R15 x 7 5x112 ET37 DIA66.6 (Тайвань) . цоколь металлический коричневый 6706 0008 НОЕ . гальванол: остерегайтесь подделок!!!

Action'ы Часть III

Валидация данных

Есть золотое правило безопасности:
Все входящие данные должны проверяться (валидироваться).

Механизм очень прост. Пример

<?php
class ValidationTest1Action extends Action {
/**
* @validate this->validName
*/

protected $name;
 
/**
* @validate this->validSurname(surname)
*/

protected $surname;
 
public function validName($var) {
return $var.':validate;';
}
 
 
public function validSurname($var,$varName=null) {
return $var.' | '.strval($varName).':validate;';
}
 
public function execute() {
return 'name='.$this->name.'<br/>surname='.$this->surname;
}
}
?>

Заммапим его:

<action name="valid1" class="ValidationTest1Action" file="mySite/actions/ValidationTest1Action.class.php"/>

когда мы его вызовем с такими параметрами: (точнее вот так:) http://myserver/valid1/name/Nikola/surname/Tesla то он вернет вот такой HTML код:

name=Nikola:validate;<br/>surname=Tesla | surname:validate;

Как Вы видите метод валидации описывается в php-доках (обязательно начинается с /** и каждая последующая строка с символа * )
Далее что бы назначить валидатор надо написать @validate {PARAMS} (все в одной строке)

В {PARAMS} может быть следующее:

  • this - указывает на этот же класс и дефолтный метод validate
  • CLASS_NAME - указывает на класс CLASS_NAME и дефолтный метод этого класса - validate. (require_once полагается на программиста)
  • this->METHOD_NAME - указывает на этот же класс и метод указанный как METHOD_NAME
  • CLASS_NAME->METHOD_NAME - указывает на класс CLASS_NAME и метод указанный как METHOD_NAME. (require_once полагается на программиста)

В конструкциях где явно указан метод можно использовать параметры. Первый параметр (точнее нулевой) - это само значение (здесь оно не пишется, в отличии от реальной сигнатуры метода, взгляните на метод validSurname.) Первый параметр - само значение переменной, второе то что мы хотим передать из описания @validate - это строковое значение - surname. Заметьте - никаких кавычек нет!

Можно использовать много параметров, например вот так:

<?php
 
...................
 
/**
* @validate this->validate(surname,MagicVALUE)
*/

protected $val;
 
public function validate($var,$varName,$magicVal) {
# $varName=='surname'; $magicVal=='MagicVALUE';
return ...........;
}
 
}
?>

Заметьте - в описании валидатора - 2 параметра, в реальной сигнатуре метода на один больше.