2014-02-11 3 views
1

Я пытаюсь использовать Uploadify для загрузки моего файла в Symfony2. Загрузка изображения должна вызывать контроллер, внутри контроллера он будет получать текущего пользователя входа, создавать подкаталоги на основе текущего имени пользователя, а затем переместить файл в эту папку. Проблема в том, что когда я запускаю $ user-> getUsername() или любые другие функции, связанные с объектом $ user, загрузка не выполняется с ошибкой HTTP 500, однако все работает нормально, когда я запускаю этот контроллер из URL.Symfony2 получает ошибку HTTP 500 при вызове Ajax

Вот код:

конфигурации Frontend для Uploadify:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#fileupload').uploadify(
      { 
       'swf': "{{ asset('javascript/uploadify.swf') }}", 
       'uploader': "{{ path('EasyLife_upload_avatar')}}", 
       'auto': true, 
       'buttonText': "Upload Avatar", 
       "buttonClass": "label", 
       "height": 30, 
       "width": 80, 
       "onUploadSuccess": function(file, data, response) { 
        alert("Successful " + file.name + " to :" + data + ":" + response); 
       }, 
       'onUploadError' : function(file, errorCode, errorMsg, errorString) { 
        alert('The file ' + file.name + ' could not be uploaded: ' + errorString); 
       } 
      }); 
    }); 
</script> 

Вот контроллер, который обрабатывает загрузку:

public function uploadAvatarAction() { 
    $user = $this->getUser(); 
    $user->getUsername(); // problem appears when this line is added on an Ajax call 
    $targetFolder = "upload/avatar"; 

    return new Response($targetFolder); 
} 

Я на самом деле есть $ user-> GetUserName() все над проектом в других контроллерах, все они хороши, даже этот работает на прямой URL-вызов, но проблема возникает при вызове Ajax, как странно?

Может ли кто-нибудь помочь? Большое спасибо!

ответ

2

Это потому, что uploadify не отправляет cookie сессии с запросом, поэтому в вашем контроллере $user = $this->getUser(); имеет значение NULL.

Вы можете увидеть подобную проблему, которую я имел here ...

Вам нужно создать хранилище пользовательских сеансов ...

<?php 

namespace Acme\AcmeBundle\Session; 

use Symfony\Component\DependencyInjection\ContainerInterface; 
use Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage; 

class Storage extends NativeSessionStorage 
{ 
    public function __construct(array $options = array(), ContainerInterface $container) 
    { 
     $request = $container->get('request'); 
     if ($request->query->has('sessionId')) { 
      $request->cookies->set(session_name(), 1); 
      session_id($request->query->get('sessionId')); 
     } 

     return parent::__construct($options); 
    } 
} 

и настроить контейнер службы ....

parameters: 
    session.storage.native.class: Acme\AcmeBundle\Session\Storage 
services: 
    session.storage.native: 
     class:  %session.storage.native.class% 
     arguments: [%session.storage.options%, @service_container] 
+0

Джеймс, вы легенда! Это именно та проблема, с которой я столкнулся! я сделал это, чтобы получить имя пользователя в шаблоне TWIG и передать его в вызов Ajax в качестве параметра ('formData', специфичный здесь для Uploadify), он работает как шарм! Благодаря! – woodnwest

Смежные вопросы