drahak/Restful, nette/form – odoslanie
- pisa98
- Člen | 17
Chcel by som sa opytat ako poslem data z formulara na svoje vlastne API. Nevedel som sa nikde nic docitat ako to pouzivat. Som uplny novacik v API.
Tu je formular
protected function createComponentArticleForm(): Form
{
$id = $this->presenter->getParameter('id');
$getArticle = $this->articleRepository->get(['id' => $id]);
$getCategories = $this->categoryRepository->findPairs('title', 'id', [], 'id ASC');
$form = new Form;
$form->addText('title', 'Titulok:');
$form->addTextArea('description', 'Opis');
$form->addTextArea('content', 'Obsah');
$form->addText('slug', 'Slug:');
$form->addSelect('categories', 'Kategórie', $getCategories)
->setPrompt('Nezaradené');
$form->addTextArea('alt', 'Vložiť popis obrázka');
$form->setAction('/api/v1/articles/create');
$form->setMethod('POST');
if ($getArticle) {
$getRelCategory = $getArticle->related('category')->fetch();
$form->setDefaults([
'title' => $getArticle['title'],
'slug' => $getArticle['slug'],
'description' => $getArticle['description'],
'content' => $getArticle['content'],
'categories' => $getRelCategory['category_id']
]);
}
$form->addSubmit('send', 'Save');
return $form;
}
Tu je action
/**
* @POST api/v1/article
*/
public function actionCreate()
{
$articles = $this->articleRepository->create();
$this->resource->article = $articles;
}
Jak prijme tie parametre z formulara?
Editoval pisa98 (9. 7. 2017 16:13)
- David Matějka
- Moderator | 6445
ale aplikace je to stejna? to znamena je to stejny codebase, bezi to na stejne domene?
k tomuhle API neslouzi, api slouzi k tomu, kdyz chces komunikovat s nejakou externi aplikaci nebo treba kdyz JS frontend posila datab PHP backendu.
tady proste uloz ten formular primo ve zpracovani formulare – idealne skrz nejakou facade, aby se ti neduplikoval kod ve zpracovani formmulare a zpracovani API pozadavku (pokud tedy api opravdu furt potrebujes :))
- pisa98
- Člen | 17
David Matějka napsal(a):
ale aplikace je to stejna? to znamena je to stejny codebase, bezi to na stejne domene?
k tomuhle API neslouzi, api slouzi k tomu, kdyz chces komunikovat s nejakou externi aplikaci nebo treba kdyz JS frontend posila datab PHP backendu.
tady proste uloz ten formular primo ve zpracovani formulare – idealne skrz nejakou facade, aby se ti neduplikoval kod ve zpracovani formmulare a zpracovani API pozadavku (pokud tedy api opravdu furt potrebujes :))
Nesluzi k tomu aby komunikovalo s nejakou externou aplikaciou. Zatial ani front end neposiela data ale v buducnosti chcem aby aj to bolo. A jak spravim to zpracovanie poziadavku? Nevies mi poslat nieco k tomu alebo napisat?
- David Matějka
- Moderator | 6445
Mas nekolik moznosti, jak to vyresit:
- pouze definice a vykresleni formulare skrz nette, zpracovani pres JS na backend API
pri definici formulare v nette nadefinujes pouze strukturu a nebudes resit
onSuccess a zpracovani v ramci klasickeho zivotniho cyklu presenteru.
v takovem pripade nemusis pouzivat Nette\Application\UI\Form
, ale
pouze Nette\Forms\Form
.
Nemuzes vsak pouzivat
$form->setAction('/api/v1/articles/create');
API neslouzi k tomu, aby se na nej presmerovaval uzivatel. budes muset udelat nejaky JS handler, ktery vezme data z formulare a posle je na ten API endpoint primo z prohlizece. A soucasne tam budes muset vyresit zpracovani chyb apod., coz je celkem slozity, takze se nabizi moznost
- formular definovany v JS, odeslany na php API backend
formular vubec nebudes definovat v php, ale primo v js (react/vue) a pouze budes z javascriptove aplikace komunikovat s php API backendem. tohle je ale z tech reseni nejslozitejsi a muze byt zbytecne, pokud neplanujes nejakou slozitou JS aplikaci
- formular definovany v nette, zpracovani taky pres nette a v onSuccess provedes pozadavek na api endpoint primo z php. reseni zcela bez JS
budes mit tedy UI\Form, ktery v onSuccess handleru provede skrz nejakou http knihovnu (treba Guzzle) POST pozadavek na tvuj API endpoint. v onSuccess pak nejak pripadne zpracujes chyby z API.
Tenhle pristu se hodi ale zejmena pokud to API a ten formular je v ramci jine aplikace, kdyz je to jen jedna aplikace, tak to celkem postrada smysl
- vykaslat se na API, dokud nebude potreba
zpracujes nette formular v onSuccess a budes mit nejakou sluzbu, treba ArticleFacade, ktera se bude starat o ulozeni toho clanku. Pak, az bude potreba API, tak nebude problem tuto tridu ArticleFacade vyuzit i pro zpracovani pozadavku z API
Takze jak vidis, moznosti je spousta, otazkou tedy je, na co a jestli API potrebujes :)
- pisa98
- Člen | 17
David Matějka napsal(a):
Mas nekolik moznosti, jak to vyresit:
- pouze definice a vykresleni formulare skrz nette, zpracovani pres JS na backend API
pri definici formulare v nette nadefinujes pouze strukturu a nebudes resit onSuccess a zpracovani v ramci klasickeho zivotniho cyklu presenteru. v takovem pripade nemusis pouzivat
Nette\Application\UI\Form
, ale pouzeNette\Forms\Form
.
Nemuzes vsak pouzivat$form->setAction('/api/v1/articles/create');
API neslouzi k tomu, aby se na nej presmerovaval uzivatel. budes muset udelat nejaky JS handler, ktery vezme data z formulare a posle je na ten API endpoint primo z prohlizece. A soucasne tam budes muset vyresit zpracovani chyb apod., coz je celkem slozity, takze se nabizi moznost
- formular definovany v JS, odeslany na php API backend
formular vubec nebudes definovat v php, ale primo v js (react/vue) a pouze budes z javascriptove aplikace komunikovat s php API backendem. tohle je ale z tech reseni nejslozitejsi a muze byt zbytecne, pokud neplanujes nejakou slozitou JS aplikaci
- formular definovany v nette, zpracovani taky pres nette a v onSuccess provedes pozadavek na api endpoint primo z php. reseni zcela bez JS
budes mit tedy UI\Form, ktery v onSuccess handleru provede skrz nejakou http knihovnu (treba Guzzle) POST pozadavek na tvuj API endpoint. v onSuccess pak nejak pripadne zpracujes chyby z API.
Tenhle pristu se hodi ale zejmena pokud to API a ten formular je v ramci jine aplikace, kdyz je to jen jedna aplikace, tak to celkem postrada smysl
- vykaslat se na API, dokud nebude potreba
zpracujes nette formular v onSuccess a budes mit nejakou sluzbu, treba ArticleFacade, ktera se bude starat o ulozeni toho clanku. Pak, az bude potreba API, tak nebude problem tuto tridu ArticleFacade vyuzit i pro zpracovani pozadavku z API
Takze jak vidis, moznosti je spousta, otazkou tedy je, na co a jestli API potrebujes :)
Diky moc to mi staci :)