2014-04-22 5 views
0

클라우드에서 파일을 저장하는 데 사용하는 모든 웹 서비스 (예 : amazon S3)를 처리하기 위해 symfony2 프로젝트에서 번들을 만들었습니다. 이 웹 서비스 중 일부는 같은 형태의 광산을 사용하지 않고 자신의 서버에 직접 파일을 보낼 수 : symfony2 양식을 사용하여 먼 API에 양식을 보내는 방법

<form action="api.thecloud.com/specificId?redirectUrl=MyUrlToGetTheResponse" > 
    <input type="file" name="file" /> 
    <input type="submit" /> 
</form> 

주어진 redirectUrl의 PARAM 날 업로드에서 정보를 얻을 내 데이터베이스의 저장 할 수 있습니다.

내 문제는 standart 심포니 폼 형식과 같이 다른 번들을 투명하게 사용자 정의 할 수있게하려는 것입니다. 이것을 할 수있는 좋은 방법이 있습니까?

내가 찾은 해결책은 조금 복잡하고 나는이 작업을 수행 할 수있는 청소기 방법이 생각 :

public function buildForm(FormBuilderInterface $builder, array $options) { 
    $builder->add('file', 'file'); 
    $builder->add('otherPostUploadInformation', 'hidden'); 
    $builder->setAction($this->Cloudservice->generateUploadUrl('my_redirect_url')) ; 
} 
public function getName(){ 
    return ''; 
} 

액션을 제공

내가 작업 URL을 지정 양식 유형을 만들 수는 다른 방법 (php 또는 twig 함수)으로 주어지며 세션에 저장됩니다.

는 my_redirect_url의 행동에, 나는 얻고 웹 서비스에서 정보를 저장하고 세션에서 저장 작업에 리디렉션 :

public function myRedirectUrlAction() { 

     $request = $this->getRequest() ; 

     // Recreate a form with received information 
     $rsrc = new CloudUploadRessource($request->query->get('id'), $request->query->get('url')); 
     $form = $this->createForm(new CloudUploadType(), $rsrc); 

     // transform it to array and add it to the request like if it has been posted 
     $formArray = $this->transformFormArray($form->createView()) ; 
     $request->request->add($formArray); 

     // redirect to the client action url with the request 
     // So he can do $form->bind($request); $form->isValid(); ... 
     $clientActionRoute = $request->getSession()->get('clientActionRoute') ; 
     return $this->forward($clientActionRoute, array('request' => $request)); 
    } 

감사

나에게로

답변

0

를, 그것은 종류 이상하게 등 사용하는 것입니다 방법 (타사 리소스에 직접 파일 업로드). 그냥 https://github.com/KnpLabs/KnpGaufretteBundle 같은 번들을 사용하지 않는 것이 좋습니다. 필요한만큼 어댑터를 구성 할 수 있습니다. 하지만이 경우에는 test/dev env에 대한 addapters 구성을 변경하여 전체 응용 프로그램/프로젝트를 테스트 할 수 있습니다.

+0

이 번들을 보았습니다. 하지만 그걸로 내 서버에 파일을 업로드 한 후에 클라우드에 업로드해야합니다. 대역폭을 절약하기 위해 클라우드에 직접 업로드하려고합니다. – Nikkidbz

+1

@Nikkidbz, 그럴 경우, 모든 uplaod 논리를 JS로 옮기는 것이 더 깨끗할 수 있습니다. (http://www.designedbyaturtle.co.uk/2013/direct-upload-to-s3-with-a- little-help-from-jquery /), 리디렉션없이 사용자를 사이트에 보관 한 다음 텍스트가있는 간단한 양식으로 처리하십시오. – pomaxa

+0

예, 좋습니다! 하지만 아마 자바 스크립트를 사용하지 않는 사람들에 대해 생각해야할까요? – Nikkidbz

관련 문제