Formuláře jako komponenty vrácení ID zpět do presenteru
- Ages
- Člen | 128
Ahoj,
je nějaký elegantní způsob jak vrátit např ID vloženého záznamu zpět
do presenteru?
Aktuálně to mám formuláře řešené takto:
//ArticlePresenter
...
public function actionArticleEdit(?int $id = NULL): void {
$this->articleId = $id;
$this->template->article = NULL;
$this->title = 'Nový článek';
if ($this->articleId !== NULL) {
$form = $this['articleForm'];
if (!$form->isSubmitted()) {
$item = $this->articleC->findById($this->articleId);
if (!$item) {
$this->error('Položka nenalezena');
}
$form->setDefaults($item);
}
$this->template->article = $this->articleC->findById($this->articleId);
$this->title = 'Editace článku';
}
$this->redrawControl('title');
$this->redrawControl('nav-content');
}
protected function createComponentArticleForm(): Form {
$form = $this->articleForm->create($this->articleId, function (): void {
$this->articleId ? $flash = 'Položka upravena' : $flash = 'Položka vytvořena';
$this->flashMessage($flash, 'success');
$this->redirect('Article:');
});
$form->onError[] = function ($form) {
$this->redrawControl('nform');
};
return $form;
}
...
//ArticleForm
...
public function create(?int $articleId, callable $onSuccess): Form {
$form = $this->factory->create();
$form->addText('title', 'Nadpis:')
->setRequired('Vyplňte prosím nadpis.');
$form->addSubmit('send', 'Uložit');
$form->onSuccess[] = function (Form $form, $values) use ($articleId, $onSuccess): void {
if ($articleId > 0) {
$this->articleC->update($articleId, $values);
} else {
$articleId = $this->articleC->insertRet($values)->id;
}
$onSuccess();
};
return $form;
}
...
- David Matějka
- Moderator | 6445
předej to jako parametr toho callbacku:
$form = $this->articleForm->create($this->articleId, function ($articleId): void {
$onSuccess($articleId);