IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr Klekner
Člen
Avatar
Petr Klekner:8.7.2017 3:11

Ahoj všichni. Mám takový začátečnický problém.

Mám komponentu:

public function createComponentPostForm() {
    $control = $this->iPostFormFactory->create();
    $control->onCategorySave[] = function($values, $postId) {
        $post = $this->postManager->getRecordById($postId);
        $post->update($this->postManager->getValuesForPost($values));
        $this->presenter->redirect('this');
    };
    return $control;
}

Továrna na vytvoření komponenty vypadá takto:

class PostFormFactory extends UI\Control {

    public function render() {
        echo $this['formPost']->render();
    }

    public function createComponentFormPost() {
        $form = new UI\Form;
        $form->addText('name', 'Jméno příspěvku:');
        $form->addText('date', 'Datum přidání:);
        $form->addSubmit('send', 'Odeslat');
        $form->onSuccess[] = [$this, 'createPostSucceeded'];
        return $form;
    }

    public function createPostSucceeded($form, $values) {
        $postId = $this->presenter->getParameter('postId');
        $this->onCategorySave($values, $postId);
    }
}

interface IPostFormFactory {

    /** @return PostFormFactory */
    function create();
}

Todle všechno funguje v pořádku zkrátil jsem to. A dále mám metodu na upravení formuláře ve stejném presenteru jako metodu na vytvoření komponenty

public function actionEdit($postId) {
        $post = $this->postManager->getRecordById($postId);
        if (!$post) {
            $this->error('Příspěvek nebyl nalezen');
        }
        $this['postForm']->setDefaults(array(
            'name' => $post->name,
            'date' => $post->date->format('d.m.Y')
        ));
}

A zde nastává problém: Call to undefined method App\Forms\Pro­jectFormFacto­ry::setDefaults().
Nevím čím přesně to je, ale myslím si, že vracím z komponenty postForm nevracím formulář. Ale nejspíš se pletu budu moc vděčný za každou radu díky moc :)

 
Odpovědět
8.7.2017 3:11
Avatar
d4rkw34v3r
Tvůrce
Avatar
d4rkw34v3r:8.7.2017 8:29

Protože to setDefaults() voláš na Komponentě a ne na formuláři.

Jinak to máš řešený poněkud zvláštně :-)

 
Nahoru Odpovědět
8.7.2017 8:29
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Petr Klekner
Petr Čech:8.7.2017 9:44

Máš prohozené názvy postForm a formPost. To je přesně, co nesnáším na PHP.
Také jak je zmíněno nad mým příspěvkem, musíš metodu setDefaults() volat na formuláři - máš 2 možnosti:

  1. tvá komponenta by měla dědit z formuláře
  2. máš na komponentě metodu setDefaults(), která propaguje zavolání na formulář.
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
8.7.2017 9:44
the cake is a lie
Avatar
Petr Klekner
Člen
Avatar
Odpovídá na Petr Čech
Petr Klekner:8.7.2017 13:11

Jo díky moc udělal jsem tu dědičnost a vše funguje jak má díky :)

 
Nahoru Odpovědět
8.7.2017 13:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.