Zjištění id příspěvku v presentru

lukasklekner
Člen | 24
+
0
-

Ahoj mám problém se zjištěním id v presentru. Problém je v tom, že mám továrnu, která mi vytváří formulář. A zkrátka bych potřeboval zjistit v presenteru id právě vytvořeného příspěvku. V továrně je vytvoření formuláře a poté v Homepage je doprogamovaná metoda onSuccess :) No a v presentru potřebuju zjistit id tohoto prvku moc děkuji za každou radu

David Matějka
Moderator | 6445
+
0
-

ukaz kod, hlavne tu onSuccess cast

lukasklekner
Člen | 24
+
0
-

Díky moc za odpověď
Todle je metoda přímo v továrně:

public function createPostSucceeded($form, $values) {
  	$this->onCategorySave($values);
}

A todle je vytvoření formuláře v presentru:

public function createComponentPostForm() {
        $control = $this->iPostFormFactory->create()->creatFormPost();
        $control->onCategorySave[] = function($values) {
            $post = $this->postManager->addPost($values);
            $this->redirect('this');
        };
        return $control;
    }

Editoval lukasklekner (18. 7. 2017 12:59)

David Matějka
Moderator | 6445
+
0
-

melo by to byt v $post->id

lukasklekner
Člen | 24
+
0
-

Když já bych to potřeboval ještě před vytvořením toho postu

Editoval lukasklekner (18. 7. 2017 13:27)

David Matějka
Moderator | 6445
+
0
-

tak dokud to neni ulozeny v db, tak to id nema :)

lukasklekner
Člen | 24
+
0
-

Hmm zvláštní protože já jsem dostal zadáno že si mám předat id postu při volání metody create, samozřejmě vím jak předat parametr ale nevím jk zjistit to id no

David Matějka
Moderator | 6445
+
0
-

no nezjistis :) id si muzes predavat, pokud editujes neco. kdyz to vytvaris, tak id zjistis az po ulozeni.

mimochodem, ten kod

$control = $this->iPostFormFactory->create()->creatFormPost();

je divy. co ti vraci create()? proc volas jeste creatFormPost? co vraci tato metoda?

lukasklekner
Člen | 24
+
0
-

jo promiň já právě to id potřebuju zjistit při editování ne při vytváření promiň… No metoda create() se nachází v interface a vrací třídu PostForm ze které si volám metodu createFormPost, která vytvoří formulář.

David Matějka
Moderator | 6445
+
0
-

prosel sis quickstart? tam ukazka editace je

No metoda create() se nachází v interface a vrací třídu PostForm ze které si volám metodu createFormPost, která vytvoří formulář.

to je divny. PostForm dedi od neceho? pokud ne a ma jen metodu createFormPost, ktera vytvori formular, tak (krom toho, ze by se to melo jmenovat PostFormFactory), tak vubec nemusis mit ten interface a rovnou PostFormFactory registrovat jako sluzbu a na tom volat createFormPost (ktera by se mela jmenovat createPostForm)

pokud PostForm je komponenta, ktera obaluje formular, tak uz na tom nic nemas volat

oboje popsane na https://doc.nette.org/…s/form-reuse

lukasklekner
Člen | 24
+
0
-

Jak si mi poslal ten návod na vytvoření té továrny, tak já to dělám podle toho druhého návodu. Jediný rozdíl co dělám je, že dědím Form. A ano máš pravdu vytváření interface je zbytečné. Hele ale s tím editováním je poté problém ve vytvoření komponenty. Pošlu ti jak to mám

public function actionEdit($postId) {
        $post = $this->postManager->getPostById($postId);
        if (!$post) {
            $this->error('Příspěvek nebyl nalezen');
        }
        $this['postForm']->setDefaults($this->postManager->getValuesForPost($post));
    }

A poté vytvoření komponenty:

public function createComponentPostForm() {
    $control = $this->iPostFormFactory->create()->creatFormPost();
    $control->onCategorySave[] = function($values) {
        $post = $this->postManager->getPostById($postId); -> Tady je problém
        $post->update($this->postManager->getValuesForPost($values));
        $this->presenter->redirect('Homepage:default');
    };
    return $control;
}
nightfish
Člen | 472
+
+1
-

lukasklekner napsal(a):

$post = $this->postManager->getPostById($postId); -> Tady je problém

Z kódu se ti vytratilo $postId = $this->getParameter('postId');

lukasklekner
Člen | 24
+
0
-

Jo super díky moc :)