Софтуерно Инженерство
Loading...
+ Нов въпрос
ivanp avatar ivanp 0 Точки

Събмитване на 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-а дори не изплюва грешка.

Тагове:
0
PHP MVC Frameworks
dimaldim92 avatar dimaldim92 149 Точки

Route-а в контролера ти е /upload , а ajax заявката ти поства на /profile ...?

 

Пробвай да не изпращаш формата като object към PHP скритпа:

data: new FormData($("#pic_data")[0])

В контролера може да дъмпнеш да видиш дали се е изпратило:

$request->files->get('името на инпута') или var_dump($request->files->all()); да се ориентираш.

Или дай скайп направо да го оправиме :)

0
28/12/2018 15:34:15
ivanp avatar ivanp 0 Точки

Промених пътя да е "/upload", признавам че е недоглеждане от моя страна, но сега ми гъми с 500 internal server error. Дали не предавам данните правилно? Пробвах и със .serilize и с new FormData и все същата грешка...

0
dimaldim92 avatar dimaldim92 149 Точки

Редактирах си поста.

0
ivanp avatar ivanp 0 Точки

Това ми е темплейта ако искате да погледнете, но там всичко е наред май. Грешката идва от AJAX-а, мисля че не стига изобщо до контролера: 

{% if app.user.userPic is null %}
    <div class="" id="imageUpload">

        <p>
            <label for="pic_data">
                <img src="{{ asset('/pictures/anonimous.jpg') }}" class="rounded-circle" id="userPic"/>
            </label>
            <br/>
        </p>
        <form method="POST" enctype="multipart/form-data" action="{{ path('uploadpic') }}">
            <p>
                <input type="file" id="pic_data" name="app_bundle_user_pic[userPic]" required>
            </p>
            <button type="submit" id="submit_pic" name="app_bundle_user_pic[Change]" class="btn btn-success btn-sm">
                Change
            </button>
        </form>

    </div>
{% else %}
    <div class="" id="imageUpload">
        <p>
            <label for="pic_data">
                <img src="{{ asset('/uploads/images/'~app.user.userPic) }}" class="rounded-circle" id="userPic"/>
            </label>
            <br/>
        </p>
        <form method="POST" enctype="multipart/form-data" action="{{ path('uploadpic') }}">
        <p>
        <input type="file" id="pic_data" name="app_bundle_user_pic[userPic]" required>
        </p>
        <button type="submit" id="submit_pic" name="app_bundle_user_pic[Change]" class="btn btn-success btn-sm">
            Change
        </button>
        </form>
    </div>
{% endif %}
0