Събмитване на AJAX заявка за смяна на снимка не ми пълни базата от данни
Имам форма, която е писана по документацията на Symfony и работи добре, но рефрешва страницата при събмит затова реших да направя AJAX заявка да сменям снимката без да обновявам цялата страница. Проблемът е че съм написал заявката, прехвърлям данните, но незнайно защо името на новата снимка не се появява в базата или в папката където ги съхранявам. Това ми е кодът в момента(контролерът):
/** * @Route("/upload", name="uploadpic") * @param Request $request * @return JsonResponse|\Symfony\Component\HttpFoundation\Response */ public function uploadAction(Request $request){ if(!$request->isXmlHttpRequest()){ return new JsonResponse( array( 'message' => 'Error', 'status' => 'Not received' ), 400); } $user = $this->get('security.token_storage')->getToken()->getUser(); $formed = $this->createForm(UserPic::class, $user); $formed->handleRequest($request); if(isset($request->request)) { $postPicture = $request->files->get('picture_data'); $file = $user->getUserPic(); $fileName = $postPicture->generateUniqueFileName() . '.' . $file->guessExtension(); $file->move( $this->getParameter('users_directory'), $fileName ); $user->setUserPic($fileName); $em = $this->getDoctrine()->getManager(); $em->persist($user); $em->flush(); return $this->render('default/index.html.twig', ['formed' => $formed->createView()]); } }
Пробвах и с $postPicture = $request->request->get('picture_data'); вместо $postPicture = $request->request->get('picture_data'); , защото принципно така работи като пращам текст от textarea с AJAX към базата.
Пробвах и $fileName = $this->generateUniqueFileName() . '.' . $file->guessExtension(); вместо $fileName = $postPicture->generateUniqueFileName() . '.' . $file->guessExtension();, защото така е писано в документацията, но и така не работи.
Кодът ми на AJAX request-а:
$("#submit_pic").on('click', function(event){ event.preventDefault(); event.stopPropagation(); $.ajax({ type: "POST", url: "/profile", data: { picture_data: new FormData($("#pic_data")[0]) }, processData: false, contentType: false, success: function () { console.log(); }, error: function () { console.log("Error here"); } }); });
Пробвах с променяне на picture_data: $("#pic_data").serialize() с picture_data: new FormData($("#pic_data")[0]), защото четох един пост в stackoverflow че не работело така. Не разбирам защо не сетва нов image като AJAX-а дори не изплюва грешка.
Промених пътя да е "/upload", признавам че е недоглеждане от моя страна, но сега ми гъми с 500 internal server error. Дали не предавам данните правилно? Пробвах и със .serilize и с new FormData и все същата грешка...
Редактирах си поста.
Това ми е темплейта ако искате да погледнете, но там всичко е наред май. Грешката идва от AJAX-а, мисля че не стига изобщо до контролера: