Julik
Guest
Помогите с QuickForm_Controller
История очень простая.
У меня форма из двух страниц. Я хочу добиться следующего функционала:
1. Если значение одно из полей на первой странице совпадает с заданным, то вторую страницу показываем (и валидируем), только потом вызываем Process action.
2. Если значение не соответствует заданному, то вторую страницу мы просто пропускаем (даже без дефолтных значений, она может просто передавать пустые массивы) и сразу выполняем Process action.
Пока что натворил такой Action (все ненужное пропускаю):
Этот Action назначается первой странице в качестве next, второй в качестве next назначается process.
Вроде как работает, но вторая страница почему-то сразу выполняет Process. Для нее что-ли надо сделать в качестве Next отдельный Action, наследующий от Process который каким-то образом вызывает $page->validate() и если что-то не так делает $page->display()?
Отличная библиотека, но реально тяжело разобраться. Даже черновой рендерер в DOMXML к ней написал за 20 минут (правда очень огорчился когда не нашел нормальных аксессоров в элементах - приходится их как текстовые узлы выводить), а такую фигню не могу сделать.
В примере statemachine разобраться как следует не смог, времени не хватает.
Помогай, Sad Spirit.
История очень простая.
У меня форма из двух страниц. Я хочу добиться следующего функционала:
1. Если значение одно из полей на первой странице совпадает с заданным, то вторую страницу показываем (и валидируем), только потом вызываем Process action.
2. Если значение не соответствует заданному, то вторую страницу мы просто пропускаем (даже без дефолтных значений, она может просто передавать пустые массивы) и сразу выполняем Process action.
Пока что натворил такой Action (все ненужное пропускаю):
PHP:
class PageFirstHandler extends HTML_QuickForm_Action_Next {
function perform(&$page, $actionName)
{
// save the form values and validation status to the session
$page->isFormBuilt() or $page->buildForm();
$pageName = $page->getAttribute('id');
$data =& $page->controller->container();
$values = $page->exportValues();
$valid = $page->validate();
// Modal form and page is invalid: don't go further
if ($page->controller->isModal() && !$valid) {
//this calls the action defined in the controller
return $page->handle('display');
}
$nextPageId = $this->_nextPageId;
$nextPage = &$page->controller->getPage ($nextPageId);
//тут я делаю свою проверку значений
if ( $this->CompareValues ($values) ) {
$nextPage->handle ('display');
} else {
//freeze all and get export values
$nextPage->handle ('process');
}
}
...
PHP:
$page1->addAction('next', new PageFirstHandler());
$page2->addAction('next', new ActionProcess());
Отличная библиотека, но реально тяжело разобраться. Даже черновой рендерер в DOMXML к ней написал за 20 минут (правда очень огорчился когда не нашел нормальных аксессоров в элементах - приходится их как текстовые узлы выводить), а такую фигню не могу сделать.
В примере statemachine разобраться как следует не смог, времени не хватает.
Помогай, Sad Spirit.