2010-06-30 9 views
3

유효성 검사를 통해 파일 업로드를 선택 사항으로 만드는 방법은 무엇입니까? 아래 코드는 내가 파일을 선택하지 않았더라도 유효성을 검사합니다. 파일을 선택한 경우에만 확장자를 확인하고 싶습니다. 파일을 선택하지 않으면 유효성 검사 오류가 반환되지 않습니다. 미리cakePHP 파일 업로드에 대한 선택적인 유효성 확인

+0

당신은 어떤 방식 으로든 컨트롤러의'imageupload' 필드를 사전 처리하고 있습니까? – deceze

+0

@deceze : 미안 전처리로 무슨 뜻입니까? ??? iagename 만 저장해야 $ this-> data [ 'Catalog'] [ 'image'] = $ this-> data [ 'Catalog'] [ 'imageupload'] [ 'name']; 그 다음에 나는 단지 – RSK

+0

이라는 저장 부를 부를 것이다. 그것은 내가 전처리하는 것을 의미한다. – deceze

답변

2

class Catalog extends AppModel{ 
    var $name = 'Catalog'; 
    var $validate = array(
     'name' => array(
      'rule' => '/^[a-z0-9 ]{0,}$/i', 
      'allowEmpty' => false, 
      'message' => 'Invalid Catalog name' 
     ), 
     'imageupload' => array(
      'rule' => array('extension',array('jpeg','jpg','png','gif')), 
      'required' => false, 
      'allowEmpty' => true, 
      'message' => 'Invalid file' 
     ), 
     ); 
} 

감사 "I는 $ this- 할당> 데이터 [ '카탈로그'] [ '상'] = $ this-> 데이터 [ '카탈로그'] [ 'imageupload'] ['이름'];"

그래서 당신은 당신의 데이터 배열을 저장 시간, 그것은 다음과 같은 형태 나는 가정

array(
    'name' => 'foobar', 
    'size' => 1234567, 
    'error' => 0, 
    ... 
) 
:

의미
array(
    'image' => 'foobar', 
    'imageupload' => array(
     'name' => 'foobar', 
     'size' => 1234567, 
     'error' => 0, 
     ... 
    ) 
) 

에서, imageupload 유효성 검사 규칙이 데이터에서 작동하도록 노력하고있다

e 유효성 검사를 시도하는 값은 단지 문자열이 아니라 물건 배열입니다. 그리고 그것은 지정된 유효성 검사 규칙을 통과하지 않습니다. 그것은 또한 결코 "비어 있지"않습니다.

이 배열을 처리 할 수있는 사용자 지정 유효성 검사 규칙을 만들거나 유효성 검사를 시도하기 전에 컨트롤러에서 추가 처리를 수행해야합니다.

+0

베스트 프랙티스 사용자 정의 유효성 확인 또는 컨트롤러에서의 더 많은 처리 – RSK

+0

맞춤 규칙이 더 나은 방법이라고 생각하지만 개인적으로는 저장하기 전에 개인적으로 '$ this-> data'로 저장합니다. –

+0

감사합니다 deceze 및 데이비드 ...... 나는 사용자 정의 유효성 검사를 위해 갈 것입니다 – RSK

1

개념 : 컨트롤러에서

, 검증, 또는 파일이 업로드되어 있는지 확인 (기본적으로 자동으로 유효성 검사를 수행하는) 저장하기 전에. 업로드되지 않은 경우 파일 필드에 대한 유효성 검사기를 설정 해제합니다.

샘플 코드 :

컨트롤러

// is any image uploaded? 
$isNoFileUploaded = ($this->request->data['Model']['field_name']['error'] == UPLOAD_ERR_NO_FILE) ? true : false ; 
if ($isNoFileUploaded) { 
    $this->Model->validator()->remove('field_name'); 
} 

주 :

이 솔루션은 두 가지 다른 방법 중 하나 (컨트롤러의 전처리, 모델 지정 유효성 검사로 사전에 해당되는) @deceze's answer