HTTP request zahazuje data z customrequest

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

Objevil jsem zajímavou věc. Připravuji jednoduché rozhraní pro můj projekt a právě ho zkouším. Ale Nette mi zahazuje data, netuším moc proč. Projel jsem pár extensions, Nette-API, stackoverflow, ale nic jsem nenašel. Takže je možné, že je to Nette třída.

Mám nějaké jednoduché posílání přec cURL (to jsem měnil asi 30× podle různých nastavení), tohle je poslední funkční:

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $encode);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

	curl_exec($ch);

A pokud si to dumpnu:

dump($request); //post private => array (2)
dump(file_get_contents('php://input')); //"name=Hagrid&age=36"

Ale, když použiji jinou metodu (podobné jako REST API):

	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'MY_WAR');

Výstup se změní na:

dump($request); //post private => NULL
dump(file_get_contents('php://input')); //"name=Hagrid&age=36

Takže předpokládám, že pokud není metoda POST, Nette request ty data smaže a nezobrazí je. Jak tedy poslat data do Nette třeba přes PUT?

Díky

newPOPE
Člen | 648
+
+1
-

Citaj data cez 'php://input' a je po probleme. Ako priklad https://github.com/…estRoute.php#L208

Pavel Kravčík
Člen | 1183
+
0
-

@newPOPE: Díky. Jo, to je náhradní řešení. Ale přijde mi to jako malé obcházení pěkné třídy. :)

A k tomu mám otázku, nemůže se stát, že tam skočí něco jiného na ten input? Jak se ten input prováže s konkrétním požadavkem? Respektive: přijdou 2 požadavky – první s daty, druhý bez dat. A nemůžou tam ty data zůstat i pro druhý a tím pádem načítat něco, co k tomu nepatří?

Jan Tvrdík
Nette guru | 2595
+
+1
-

To je normální vlastnost PHP, že v $_POST (čemuž odpovídá v Nette $request->post) není nic, pokud metoda není POST. Řešením by mohlo být https://github.com/…http/pull/58.

Pavel Kravčík
Člen | 1183
+
0
-

Jasně, tohle je super. Díky! Akorát v tom constructoru to chce dopsat jeden řádek, jak tam píše Majkl.