2011-10-03 4 views
0

프론트 엔드에 파일 업로드 양식이 있습니다. 새 레코드가 생성 될 때 순간 Symfony에서 레코드 ID가 포함 된 디렉토리에 파일을 업로드하는 방법

는, 파일은 내가 따라서

%sf_data_dir%/files/%record_id%/ 

에 업로드 할 파일을 필요로 일부 비즈니스 로직에

%sf_data_dir%/files/ 

에 있지만 인해 업로드 업로드 된 파일은 레코드가 생성 된 후에 저장되어야합니다.

어떻게하면됩니까? 당신은 파일 업로드를 사용하는 경우 (즉, 잘못하지 않은 경우)

답변

2

이 양식은 확실히 sfValidatorFile를 사용합니다 :

$this->validatorSchema['image'] = new sfValidatorFile(array(
            'required' => true, 
            'mime_types' => 'web_images', 
          )); 

이 검증 당신이 원하는 어디든지 저장 될 수있는 sfValidatedFile 인스턴스를 반환 (그것보다 더 안전 move_uploaded_file, 디렉토리에 파일 이름 ...)이 있는지 확인합니다. 액션에서

(또는 형태로, 당신은/필요가 원하는대로), 당신은 지금이 작업을 수행 할 수 있습니다

protected function processForm(sfWebRequest $request, sfForm $form) 
{ 
    $form->bind(
    $request->getParameter($form->getName()), 
    $request->getFiles($form->getName()) 
); 

    if ($form->isValid()) 
    { 
    $job = $form->save(); 
    // Saving the file to filesystem 
    $file = $form->getValue('my_upload_field'); 
    $file->save('/path/to/save/'.$job->getId().'/myimage.'.$file->getExtension()); 
    $this->redirect('job_show', $job); 
    } 
} 

가 작동 방식을 볼 수 sfValidatedFile을 열 것을 주저하지 마십시오.

+0

고마워요! 나는 다른 해결책으로 나왔지만, 당신은 훨씬 더 우아 해 보입니다. 테스트를 마치면 답변을 수락합니다. – Davide

+0

늦어서 죄송합니다. 다시 답변 해 주셔서 감사합니다. :) – Davide

관련 문제