2015-01-16 11 views
1

사진을 업로드했는지 확인하는 필터를 사용하고 싶습니다. 실제 업로드는 양식에서 발생하지 않지만 자바 스크립트로 실행됩니다. 파일 이름이 모든 사용자마다 다르므로 업로드 된 파일의 존재 여부를 확인하는 필터 규칙을 추가하려고했습니다. 파일이 존재하지 않으면 $ this-> formElementErrors ($ this-> form-> get ('photo'))으로보기에 오류가 표시됩니다.inputfilter에서 file_exists 사용

필터 외부의 유효성 검사기를 테스트했지만 문제없이 작동합니다. 솔루션은 아래 코드와 같아야합니다.

$filter = new \Application\Form\SomeFilter(); // Existing filter rules. 
$filter->add(array(// Add rule. There is no photo record available in SomeFilter() 
    'name' => 'photo', 
    'required' => true, 
    'validators' => array(
    array(
     'name' => 'Zend\Validator\File\Exists', 
     'options' => array(
     '/directory/[different_number].jpeg', 
    ) 
    ) 
) 
)); 
$form->setInputFilter($filter); 

동일한 문제를 해결 한 사람이 인터넷에서 검색되었지만 해결책을 찾지 못했습니다. 나는 옵션 어레이에 문제가 있다고 생각하지만, 나는 무엇을 모르고있다. 누가이 문제를 해결할 수 있는지 알고 있습니까?

답변

1

먼저 잘못된 옵션 서명이있는 Exists 유효성 검사기를 만듭니다. 디렉토리 키가 있어야하고 값은 디렉토리 여야하며 이미지의 전체 경로 + 파일 이름이 아니어야합니다.

예 :

'validators' => array(
    array(
     'name' => 'Zend\Validator\File\Exists', 
     'options' => array(
     'directory' => '/path/to/image/directory', 
    ) 
    ) 
) 

둘째 세부 당신이 Exists 검증 만 조회 디렉토리가 아닌 파일의를 알고 있기 때문에 양식/필터의 isValid() 메소드를 호출하기 전에 '사진'입력 값을 설정해야 할 것입니다 이름.

당신은 이런 식으로 뭔가를 시도 할 수 있습니다 :

// .. 
$filter->get('photo')->setValue('[different_number].jpeg'); 
$form->setInputFilter($filter); 

는 도움이되기를 바랍니다.