2014-02-11 15 views
1

Symfony2에서 업로드하는 파일을 처리하기 위해 Uploadify를 사용하려고합니다. 이미지 업로드는 컨트롤러를 호출해야하며, 현재 로그인 사용자를 얻고 현재 사용자 이름을 기반으로 하위 디렉토리를 만든 다음 해당 폴더로 파일을 이동합니다. 문제는 $ user-> getUsername() 또는 $ user 객체와 관련된 다른 함수를 실행할 때 HTTP 500 오류로 업로드가 실패하지만 URL에서이 컨트롤러를 실행할 때 모든 것이 정상적으로 작동하는 것입니다. uploadify에 대한Symfony2는 Ajax 호출에서 HTTP 500 오류를받습니다.

프런트 엔드 구성 : 여기

<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); 
} 

가 실제로> getUserName 메서드를 ($ 사용자 -이)를 모두 다른 컨트롤러의 프로젝트를 통해 모두 좋은 결과를 얻었지만 직접 URL 호출에서도 작동하지만 Ajax에서 호출 할 때 문제는 얼마나 이상합니까?

아무도 도와 줄 수 있습니까? 고마워요!

답변

2

uploadify가 요청과 함께 세션 쿠키를 보내지 않기 때문에 컨트롤러에서 $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 호출에 매개 변수 (Uploadify의 경우 여기에서 'formData')로 전달하는 것입니다.이 스크립트는 매력으로 작동합니다. 감사! – woodnwest