Použití setDefaults u Containeru ve formuláři
- d@rkWolf
- Člen | 167
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
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 | 167
@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ě?