Я бы сохранял данные формы в сеансе пользователя.Таким образом, они могут быть восстановлены из сеанса независимо от того, куда пользователь возвращается обратно в форму.Это будет означать, что если у вас есть showFormAction
и showResultsAction
, вам нужно сохранить данные формы в showResultsAction
следующим образом:
public function showResultsAction(FormData $formData)
{
$this->storeInSession($formData);
// do something with the formData here
}
protected function storeInSession(FormData $formData)
{
if ($GLOBALS['TSFE']) {
$GLOBALS['TSFE']->setAndSaveSessionData('tx_myext_formdata',$formData);
} elseif($GLOBALS['BE_USER']) {
$GLOBALS['BE_USER']->setAndSaveSessionData('tx_myext_formdata',$formData);
}
}
Вы собираетесь получить данные формы наследующий визит пользователей showFormAction
, например:
public function showFormAction(FormData $formData = NULL)
{
if ($formData === NULL) {
$formData = $this->getSessionData();
}
$this->view->assign('formData', $formData);
// do more stuff for the form here
}
protected function getSessionData()
{
$formData = NULL;
if ($GLOBALS['TSFE']) {
$formData = $GLOBALS['TSFE']->fe_user->getSessionData('tx_myext_formdata');
} elseif ($GLOBALS['BE_USER']) {
$formData = $GLOBALS['BE_USER']->getSessionData('tx_myext_formdata');
}
return $formData;
}
и передача formData вашему помощнику вида формы <f:form method="POST" action="list" name="formData" object="{formData}">
.
FormData в этом примере - это DTO, в котором хранятся формы.отдельные поля как свойства, как модель, но не сохраняются в таблице базы данных, как AbstractEntities.Таким образом, легче вернуть восстановленные значения обратно в форму, потому что форма автоматически заполняет свои поля значениями из DTO.Например, если у вас есть поле <f:form.textfield name="somefield" />
в вашей форме, вы даете FormData DTO свойство property $somefield = '';
, получатель и установщик и измените помощник представления на <f:form.textfield property="somefield" />
, и форма сама обработает предварительное заполнение.