Symfony get javascript FormData

Buna, am o problema si sper ca voi gasi un raspuns aici. Am urmatorul cod:

let headers = new Headers();
headers.append('Content-Type', 'multipart/form-data');
let options = new RequestOptions({ headers: headers });
let fd = new FormData();

fd.append('title', portofolio.title);
fd.append('description', portofolio.description);
fd.append('images', portofolio.images[0]);
return this.http.post('admin/portofolio/add', fd,  options).map(res => res.json());
$content = $request->getContent(); 
$jsonDecoded = json_decode($content);

//si asa am incercat
$request->request->all();
$request->request->get('title')

------WebKitFormBoundaryZUTARpqVYtBlXrKs
Content-Disposition: form-data; name=“title”

Title
------WebKitFormBoundaryZUTARpqVYtBlXrKs
Content-Disposition: form-data; name=“description”

Desc
------WebKitFormBoundaryZUTARpqVYtBlXrKs
Content-Disposition: form-data; name=“images”; filename="20160220_023626-COLLAGE.jpg"
Content-Type: image/jpeg

Si nicidecum nu pot luat datele in Symfony.
Va multumesc

Nu merge pentru că încarci fișiere, ceea ce îtî transformă request-ul într-unul multi-part (de asta request-ul tău nu este JSON, cum te așteptai).
Poți să încerci cu $request->getContents() sau varianta plain PHP $data = file_get_contents('php://input');

Eu in cazuri de genul asta folosesc FileReader: https://developer.mozilla.org/en/docs/Web/API/FileReader

$(document).ready(function()
{
	var file_selector = $('<input type="file" />');

	file_selector.on("change", function(event)
	{
		if(this.files.length)
		{
			var file = this.files[0];
			var reader = new FileReader();
			reader.onload = function(event)
			{
				$.post("campanie.php", { cmd: "upload", data: event.target.result }, function(response)
				{
					alert(response);
				});

				$(file_selector).val("");
			}

			reader.readAsDataURL(file);
		}
	});

	$("#incarca").click(function()
	{
			file_selector.click();
	});
});

In capatul dinspre server “decodezi” datele cu file_get_contents: http://php.net/manual/ro/function.file-get-contents.php

$filename = basename($_POST["title"]);
$bin_data = file_get_contents($_POST["data"]);
file_put_contents("/tmp/$filename", $bin_data);
1 Like

Am rezolvat intrebarea, multumesc mult. Mai este una care nu intelege,

return new JsonResponse([
            'request' => json_decode($request->getContent()),
            'files' => $request->files,
            'post' => $_POST,
            'f' => $_FILES
        ]);

imi arata $_FILES si $_POST, dar $request->files imi da null si nu inteleg din ce cauza

Pai daca nu ne spui cum ai “rezolvat” e putin probabil sa intelegem noi cauza.

Cand fac API debugging de obicei cer:

  • endpoint
  • full payload with HTTP headers and everything (e.g. attached image or file)
  • the code that is being hit + middleware(s) if the case
  • framework/libraries versions
  • browser version + does it work via curl? (de n-ori mi s-a intamplat ca un API endpoint nu mergea pt. ca se folosea o extensie obscura de chrome pt. testarea lui)