Formuláře jako komponenty vrácení ID zpět do presenteru

Ages
Člen | 127
+
0
-

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
+
+3
-

předej to jako parametr toho callbacku:

$form = $this->articleForm->create($this->articleId, function ($articleId): void {
$onSuccess($articleId);
Ages
Člen | 127
+
0
-

David Matějka napsal(a):

předej to jako parametr toho callbacku:

$form = $this->articleForm->create($this->articleId, function ($articleId): void {
$onSuccess($articleId);

@DavidMatějka moc děkuji, funguje parádně!