Použití setDefaults u Containeru ve formuláři

d@rkWolf
Člen | 162
+
0
-

Prosím jak použít setDefaults pro Container ve formulář?

Mám továrnu na formulář s create nějak takto:

    public function create(callable $onSuccess, callable $onException): BootstrapForm
    {
        $activeLangs = $this->langsRepo->getActiveLangsAdmin();
        $langIds = [];

        /** @var BootstrapForm $form */
        $form = $this->factory->create();
        $form->ajax = true;
        $form->renderMode = RenderMode::VERTICAL_MODE;
        // language tabs
        foreach ($activeLangs as $lang) {
            $sub[ $lang->id ] = $form->addContainer($lang->id);
            $sub[ $lang->id ]->addText('nav_title', 'admin.pages.nav_title')
                             ->setMaxLength(60);
            $langIds[] = $lang->id;
        }
		...další položky...

A nedaří se mi přijít na to, jak to v metodě actionEdit v Presenteru naplnit pro editaci výchozími hodnotami

    public function actionEdit(int $id): void
    {
        $page = $this->pagesRepo->getPage($id); // stranka
        if (!$page) {
            $this->error('nenalezeno');
        }

        $pageContent = $this->pagesRepo->getPageContent($id); // texty stranky dle id jazyka
        foreach ($pageContent as $langKey => $contentByLang) {
            $page[$langKey] = $contentByLang;
        }

        $this['pageForm']->setDefaults($page);
    }

Vytáhnu obsah do pole, co má stejný formát jako má ten formulář výstup když se kouknu na Values při odeslání, ale furt se dozvídám, že:

„Component with name ‚nav_title‘ does not exist.“

Co to má dělat? Generuju tím formulář, který má v tabech texty v dostupných jazycích, to se pak ukládá do 2 tabulek, v jedné základní konfigurace a v druhé podle ID té první jazykové verze. Ukládání mi funguje, ale jak to editovat, na to nemůžu přijít.

Ondřej Kubíček
Člen | 494
+
0
-

a ono platí $lang->id === $langKey ?

vytváříš container s název $lang->id a ve foreach v action ti tenhle mezikrok uplně chybí

d@rkWolf
Člen | 162
+
0
-

@OndřejKubíček jo, $lang->id === $langKey, v obou případech je to 1 a 2

$values z formu:

Nette\Utils\ArrayHash
created_by: ‚1‘
parent: 0

1: Nette\Utils\ArrayHash
nav_title: ‚Stránka 3‘

2: Nette\Utils\ArrayHash
nav_title: ''

page_type: 2
in_nav: true
is_active: true
id: ''
active_langs: ‚1,2‘

a pole v Action do setDefaults:

array
‚id‘ ⇒ 8
‚parent‘ ⇒ 0
‚in_nav‘ ⇒ 1
‚page_type‘ ⇒ 2
‚is_active‘ ⇒ 1
‚pos‘ ⇒ 0
‚created_by‘ ⇒ 1

1 ⇒ array
‚page‘ ⇒ 8
‚lng‘ ⇒ 1
‚nav_title‘ ⇒ ‚Stránka 2‘

2 ⇒ array
‚page‘ ⇒ 8
‚lng‘ ⇒ 2
‚nav_title‘ ⇒ ‚Page 2‘

Až na to, že z formuláře vypadne arrayHash, zatímco z DB vytahuju array, mi to připadá správně?