onPHP 1.1 удобные формы
Наконец-то формы стали более дружелюбны к разработчика. Убрали широко используемые до этого addRule() вместо них теперь можно добавлять свои ошибки на поля формы в дополнение к стандартным отсутствие/неверное значение.
Еще из приятных вещей, что можно получить ошибку для конкретного поля, не придумывая для этого замысловатые конструкции (не все же ведь ошибки выводят скопом, некоторые и около полей); появились еще и описания ошибок – дополнительные поля, которые можно использовать (а можно и не использовать) по своему усмотрению.
У PrimitiveList больше нет методов setDefaultAction() и getActualValue – надо просто установить значение setValue(), и оно и будет дефолтным в случае чего, при получении через getChoiceValue().
Небольшой примерчик:
const ERROR_LOGIN_USED = 3; // 1 и 2 - стандартные ошибки
...
$form = Form::create()->
add(
Primitive::string('login')->
setAllowedPattern('/^.{4,}$/is')
)->
add(
Primitive::choice('action')->
setList($actionList)->
// значение по умолчанию
setValue(self::ACTION_REGISTRATION)
);
$form->import($request->getGet())->importMore($request->getPost());
...
// Здесь мы узнаем что такая учетка уже есть
$form->markCustom('login', self::ERROR_LOGIN_USED);
И теперь в шаблоне зададим значения для 3х ошибок (можно еще и описания)
$form->addWrongLabel('login', 'Логин указан неверно');
$form->addCustomLabel('login', BasePrimitive::MISSING, 'Логин не указан');
$form->addCustomLabel('login', UserRegistration::ERROR_LOGIN_USED, 'Логин уже зарегистрирован');
// Можно дополнительно задать описание для ошибки
$form->addErrorDescription('login', UserRegistration::ERROR_LOGIN_USED, 'Выберите другой логин');
// Выводить можно по старинке
foreach($form->getTextualErrors() as $err) {
?><p><?=$err?></p><?
}
// А можно рядом с необходимым полем:
?>
<p><?=$form->getTextualErrorFor('login')?></p>
<p class="description"><?=$form->getErrorDescriptionFor('login')?></p>
Декабрь 29th, 2009 at 00:18
Пожалуй вставлю свои пять копеек и скажу, что кастомные ошибки были еще в версии 1.0.9. Может и раньше, так далеко уже не заглядывал )))
Февраль 12th, 2010 at 21:25
Помню кастомные ошибки еще с лета 2008-го года…