Odeslání formuláře ven z aplikace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
RomikTronik
Člen | 27
+
0
-

Dobrý den,

potřebuju odeslat formulář metodou POST ven z nette aplikace na jinou doménu. (Jedná se o validační skript, který mi pak POST pošle zpět)
Můžete mi prosím někdo poradit jak?

srigi
Nette Blogger | 558
+
0
-

Musis pouzit cURL, cca takto:

$data = 'from=Betty%20Lee&comment=Lorem%20ipsum%20dolor%20sit%20amet';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($curl);

Editoval srigi (13. 9. 2010 14:51)

redhead
Člen | 1313
+
0
-

FYI: jde to i bez cURL a dalších 3rd-party knihoven.

Editoval redhead (13. 9. 2010 15:09)

RomikTronik
Člen | 27
+
0
-

redhead:
paráda, a jak?

redhead
Člen | 1313
+
0
-

Stačí fce fopen() nebo file_get_contents() (název souboru bude URL) s použitím volitelného parametru $context . Context získáš přes stream_context_create(). Více info si najdi na php.net u těhle funkcí a v komentářích pod nimy jsou vždy dobré rady.

edit: taky to ovšem z bezpečnostních důvodů nemusí jít, nejsem si jist, jestli to nějaká direktiva může zakázat (safe mode nebo něco podobného). Vyzkoušej..

Editoval redhead (13. 9. 2010 16:19)

RomikTronik
Člen | 27
+
0
-

Takže jestli to dobře chápu, tak Nette podporuje odeslání formuláře pouze na akci ve které je formulář spuštěný – tj. na sebe sama. A abych poslal POSTem formulář někam jinam, musím na to vymyslet nějakou speciální fintu, která obejde pattern Post-Redirect-Get?

Myslím, že je dobrý nápad nějaké dvířka na posílání formulářů ven akce do Nette dodělat. Potřebuju poslat formulář na validační skript při platbě kartou – což je podle mě věc, kterou potřebuje 90% komerčních projektů.

westrem
Člen | 398
+
0
-

Priznam sa, ze ked som videl srigi-ho postovat veci od cURL tak som si myslel, ze asi nechapem tvoj problem a pytas sa na nieco na co naozaj pomoze cURL ale po tvojom poslednom prispevku mi neda sa nespytat: Nehladas nahodou funkciu setAction? (API)

$form->setAction($url);
RomikTronik
Člen | 27
+
0
-
$form->setAction($url);

mi boužel nefunguje.

Pokaždé nastaví formuláři action=„presenter/action?do=myForm-submit“

Editoval RomikTronik (14. 9. 2010 11:48)

toka
Člen | 253
+
0
-

Pokud použiji „klasický“ Form, tak vše funguje:

	...
	$form = new Form('search');
	$form->setAction('http://www.odkaznekamdohaje.cz/neco.php');
	$form->setMethod('get');
	...

Pokud ale použiji AppForm, tak už funguje pouze setMethod():

	...
	$form = new AppForm();
	$form->setAction('http://www.odkaznekamdohaje.cz/neco.php');
	$form->setMethod('get');
	...

Tzn. Nette nuceně „někde“ přepisuje parametr action u formuláře pokud využiji AppForm? Dá se to někde vypnout, resp. jak docílit požadovaného výsledku? Samotného mne to zajímá.

redhead
Člen | 1313
+
0
-

Já myslím, že už jsem na tohle někde narazil a myslím, že řešení bylo připojit formulář k rodiči přes konstruktor. Ale jistý si nejsem..

Patrik Votoček
Člen | 2221
+
0
-

Je to přesně jak píše redhead… Attachuj si form přímo v konstruktoru… (Obecně by se dalo říct že by jsi to u formulářů mel používat vždy předejdeš tím v budoucnu dalším problémům…)

westrem
Člen | 398
+
0
-

toka napsal
Tzn. Nette nuceně „někde“ přepisuje parametr action u formuláře pokud využiji AppForm? Dá se to někde vypnout, resp. jak docílit požadovaného výsledku? Samotného mne to zajímá.

Wow a to som extra kukal APIcko, pretoze som vedel, ze u Form-u to bude okej a u AppForm by mohol byt problem tak som nechcel zavadzat, viete ma niekto odkazat kde sa to natvrdo prepisuje pri AppForme?

vrtak-cz napsal

Nie som si isty ci obaja pod pripojenim v konstruktoru rozumiene to iste, mozes ukazat kusok kodu, ktory by ukazoval ako na to? Dakujem.

redhead
Člen | 1313
+
0
-
<?php
protected function createComponentForm($name) {
	$form = new AppForm($this, $name);	// misto new AppForm();
	$form->setAction(..);
	..
?>

Editoval redhead (14. 9. 2010 14:21)