2010-05-06 3 views
4

우분투에서 Symfony 1.3.2를 사용하고 있으며 여러 위젯이 포함 된 양식이 있습니다. 하나의 위젯은 사용자가 그림을 선택할 수있게 해주는 sfWidgetFormInputFile입니다.Symfony forms - 이전에 선택한 파일 기억하기

양식이 유효하지 않은 경우 오류 필드를 수정하기 위해 양식을 다시 사용자에게 제시합니다.

내가 겪고있는 문제는 현재 foem이 (어떤 이유로 든) 유효성을 검사하지 못하면 사용자가 지정한 그림 파일이 손실된다는 것입니다. 즉 파일을 다시 선택해야합니다.

어떻게하면 선택한 그림 파일이 그대로 남아있어서 양식을 사용자에게 다시 표시 할 수 있습니까? (파일을 다시 선택하지 않아도 됨)?

POST 된 양식을 처리하는 작업에서 getFiles ($ key)를 호출 한 다음 검색된 배열의 색인을 생성하여 파일 정보를 가져오고 위젯의 기본값을 설정합니다 (아래 참조). 그러나, 렌더링 위젯이 비어 (이전에 선택한 파일의 경로 이름의 값을 유지하지 않는

을 내 (행동) 코드의 조각은 다음과 같습니다.

$files = $request->getFiles('foobar'); 

if(!empty($files) && isset($files['pict_path'])){ 
    $pic_info = $files['pict_path']; 
    $originalName =$pic_info['name']; 
    $type = $pic_info['type']; 
    $tempName = $pic_info['tmp_name']; 
    $size = $pic_info['size']; 
    $pict_file = new sfValidatedFile($originalName, $type, $tempName, $size); 

    $this->form->setWidget('pict_path', new sfWidgetFormInputFile(array('default'=>$pict_file))); 
} 

사람이 방법을 제안 할 수 정확하게 원하는 동작은?

위에서 설명한 구현할

답변

0

난 당신이 파일 업로드 컨트롤의 상태를 저장할 수 있다고 생각하지 않습니다. 그리고 난 당신이해야한다고 생각하지 않습니다.

당신은 가장 우선적으로 파일을 업로드 할 수 양식이 처리됩니다. 두 가지의 프로세스 :

  1. 파일 유효성 검사
  2. 폼 검증

양식 유효성 검사가 실패하고 사용자가 올바른 정보를 사용하여 다시 제출하지 않는 경우, 당신은 나중에 파일을 삭제. 이로 인해 약간의 오버 헤드가 추가되지만 사용자 경험이 향상됩니다. 사용자가 실수로 잘못된 데이터를 입력 할 수 있지만 적절한 지침을 사용하여 페이지를 다시로드하면 파일이 계속 남아 있습니다.

2

입력 HTML 태그 (type = "file")의 value 속성은 읽기 전용입니다. 기본값으로 설정할 수 없습니다. 이렇게하면 입력 태그의 값을 설정하여 사용자 하드 드라이브의 파일을 서버에 업로드 할 수 있습니다.

사용자는 양식을 제출할 때마다 암시 적으로 파일을 선택해야합니다. Tomas가 제안하는 해결책은 좋은 것입니다. 파일을 임시 폴더에 저장하고이 정보를 세션에 저장하십시오 (양식에서 다시 이것을 어딘가에 표시 할 수 있음). 성공적인 양식 제출 후 파일에 대한 세션 정보를 지우고 파일을 올바른 대상으로 이동하십시오.

이 페이지를 참조하십시오. B.10.1 W3C 웹 사이트 양식의 보안 문제 : http://www.w3.org/TR/html401/appendix/notes.html#forms-security

관련 문제