Zjištění id příspěvku v presentru
- lukasklekner
- Člen | 24
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
- lukasklekner
- Člen | 24
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)
- lukasklekner
- Člen | 24
Když já bych to potřeboval ještě před vytvořením toho postu
Editoval lukasklekner (18. 7. 2017 13:27)
- lukasklekner
- Člen | 24
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
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
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
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
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;
}