Ajax – překreslení formuláře nenačte data

d@rkWolf
Člen | 167
+
0
-

Zdravím,
mám add/edit formulář na adresu v komponentně – když odstraním ajax, vše funguje, data se uloží, redirect(this) reloadne stránku, formulář se načte s nově uloženými údaji, změní se popisek tlačítka (přidat->upravit).
Jak přidám třídu ajax, fungovat to přestane. Data se sice uloží, ale dotaz v ActionDefault, který má ty uložené údaje načíst a vyplnit je do formuláře vyjde s výsledkem null(ten bdump) – ten samý, který při redirectu funguje správně. Díky tomu nezmění tlačítko a nedoplní id záznamu, takže další úprava není možná. Je to u přihlášeného uživatele, getId() vrací ID správně, pokud si dotaz s výsledkem null skopíruju z Tracy do PhpMyAdmin, výsledkem je správně uložený řádek. Je tam použitá Naja 1.8×.
Úplně mi uniká, kde je problém.

Presenter:

final class MyPresenter extends BasePresenter
{
	use AddressFormFactory;

    public function actionDefault(int $itemId): void
    {
        $address = $this->webAddressRepo->getByUser($this->getUser()->getId());
		bdump($address);
        if ($address) {
            $addressForm =$this->getComponent('addressForm')['form'];
            $addressForm->addHidden('id');
            /** @var SubmitButton $send */
            $send = $addressForm->getComponent('send');
            $send->setCaption('Update address');
            $addressForm->setDefaults($address);
        }
    }
}

Traita s továrnou komponenty

trait AddressFormFactory
{
    #[Inject]
    public IAddressFormFactory $addressFormFactory;

    protected function createComponentAddressForm(): AddressForm
    {
        $control = $this->addressFormFactory->create($this->getUser()->getId());
        $control->onSave[] = function (AddressForm $control) {
            $control->flashMessage($this->translator->translate('Address saved'), 'alert alert-success');
            if ($this->isAjax()) {
                $control->redrawControl('form');
                $control->redrawControl('flashes');
            } else {
                $this->redirect('this');
            }
        };

        return $control;
    }
}

šablona komponenty s formulářem (použil jsem bootstrap formátování jako je v jednom z Examples)

{import '../../Presenters/templates/@components/form-bootstrap5.latte'}

<div n:snippet="flashes" data-naja-history-nocache>
    <div n:foreach="$flashes as $flash" n:class="alert, $flash->type, alert-dismissible, fade, show" role="alert">
        {$flash->message}
        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    </div>
</div>

<div class="account-form-area" n:snippet="form">
    {include bootstrap-form form}
</div>

v šabloně presenteru už je to pak vloženo jen takto:

{control addressForm}

Editoval d@rkWolf (8. 4. 19:37)