Ситуация следующая. У меня в ТБД есть два поля. Первое - body, второе - marked_body. В первое поле пишутся данные с markdown разметкой, которые прогоняются по функции htmlspecialchars, объявленной в rules таким образом
В поле marked_body я пишу данные из $_POST[‘body’], которые также прогоняю в экшене через htmlspecialchars а потом через метод transform() класса CMarkdownParser. Т.е. храню во втором поле разметку которую и отображаю потом. Но, что меня не устраивает, так это то, что и htmlspecialchars и transform я выполняю в экшене, а хотелось бы реализовать все так, чтоб сама модель выполняла эти действия, но увы, не могу понять как правильно прописать функцию-валидатор, которую потом и вызвать из rules.
Что-то для меня валидация модели оказалсь камнем преткновения, не могу понять как она работает.
Пожалуйста дайте примеры, если можно, то приближенные к моей задаче.
ну вообще валидацаия должна либо "одобрить", либо "отвергнуть", а у вас скорее фильтр, вы можете в beforeSave, если юзаете ар проделать все манипуляции, либо:
‘body’, ‘myFunction’, ‘param’=>array(0,1)
function myFunction ($attribute, $param){
$body=$this->{$attribute}
if (isset($param[0]))$body=intval($body);
if (isset($param[1]))$body=(bool)$body;
$this->{$attribute}=$body;
}
примерно так, с доп проверками конечно и прочим, например $param is_array и т.д.
Можно немного детализации? В функции attribute - это поле которое валидируется? А param - это просто флаги, указывающие, что именно в функции следует выполнить? Это единственое применение праметров, или могут быть другие варианты использования?
Извините за глупые вопросы, но сколько документацию не перечитываю - этот момент, т.е. все что связано с валидацией, уяснить не могу.