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- указывает на этот же класс и дефолтный методvalidateCLASS_NAME- указывает на классCLASS_NAMEи дефолтный метод этого класса -validate. (require_once полагается на программиста)this->METHOD_NAME- указывает на этот же класс и метод указанный какMETHOD_NAMECLASS_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 параметра, в реальной сигнатуре метода на один больше.
