Překreslení formulářových chyb v dialogové komponentě
- Phalanx
- Člen | 310
Ahoj,
mám vytvořenou komponentu pro dialogové okno kde mám formulář. Vše mi funguje správně až na chybové hlášky. Potřebuju invalidovat při chybě pouze ty – proto jsem je obalil snippetem, ale invaliduje se mi celý dialog čímž se smažou některá data.
Ve vrácených snippetech vidím jak formErrors tak i celý dialog,
potřebuju překreslit pouze formErrors.
Funguje správně odeslání formuláře, zavření formuláře, live validace
formuláře. Tedy všechno kromě chyb, , které se generují až v PHP po
odeslání formuláře.
Pomohl by mi někdo prosím?
Nevím, jestli je v pořádku mít 3 úrovně snippetů.
<?php
public function processDialog(Form $form)
{
try {
...
} catch(\Exception $e) {
$form->addError($e->getMessage());
$this->redrawControl('formErrors');
return;
}
}
public function processDialogError(Form $form)
{
if ($this->presenter->isAjax()) {
$this->redrawControl('formErrors');
}
}
<div n:snippet n:inner-if="$renderModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="dialogModalTitle" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content ajax-overlay">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="dialogModalTitle">{_messages.Title}</h4>
</div>
<form n:name="calendarDialog" class="form-horizontal">
<div class="modal-body">
{snippet formErrors}
<div class="alert alert-block alert-danger fade in" n:if="sizeof($form->getErrors())">
<div n:foreach="$form->getErrors() as $error">{$error}</div>
</div>
{/snippet}
{input from}
</div>
<div class="modal-footer">
<button n:name="send" class="btn btn-primary ajax">{_messages.Send}</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{_messages.Cancel}</button>
</div>
</form>
</div>
</div>
</div>
ve view pro presenter default.latte
{snippet dialogWrapper}
{control dialog}
{/snippet}
?>
edit: přidán výpis z view
Editoval Phalanx (6. 1. 2017 10:43)
- Phalanx
- Člen | 310
Přišel jsem na řešení. Ne tak hezké, ale funguje. Zakázal jsem překreslení všeho při chybě. Potom se jde do processDialogError, kde už se nastaví překreslení errors.
<?php
try {
...
} catch(\Exception $e) {
$form->addError($e->getMessage());
$this->redrawControl(NULL, FALSE); // tento řádek je důležitý
return;
}
?>