2014-09-29 7 views
0

그래서 두 모델은 CompanyUser입니다. 여기서의 관계는 다음과 같습니다CakePHP 여러 모델에 대한 하나의 양식이 제대로 유효성을 확인하지 못합니다.

회사 :

public $hasMany = array(
'User' => array(
    'className' => 'User', 
    'foreignKey' => 'company_id', 
) 

사용자 :

public $belongsTo = array(
    'Company' => array(
     'className' => 'Company', 
     'foreignKey' => 'company_id', 
    ) 

그리고 두 인스턴스가 만들어지는 한 형태가있다. 문제는 Company 필드 만 유효성을 검사하고 User 필드가 유효하지 않다는 것입니다. User을 만들거나 편집하는 데 대한 유효성 검사 규칙이 완벽하더라도. 여기에 문제의 형식은 다음과 같습니다

echo $this->Form->create('Company', array('action'=>'register'));?> 

    echo $this->Form->input('Company.name', array('label'=>__('Company name*'))); 
    echo $this->Form->input('Company.address', array('label'=>__('Address*'))); 
    echo $this->Form->input('Company.city', array('label'=>__('City*'))); 
    echo $this->Form->input('User.0.name', array('label'=>__('Name*'))); 
    echo $this->Form->input('User.0.email', array('label'=>__('Email*'))); 
    echo $this->Form->input('User.0.email_confirmation', array('label'=>__('Email confirmation'))); 


echo $this->Form->end(array('label'=>'Save', 'onclick'=>'disableSubmit(this)')); 

나는 validate only 옵션을 충분히 알고,하지만 난 검증 작업을 할 수있는 적절한 방법이 무엇인지 궁금합니다.

도움이나 도움을 많이 주시면 감사하겠습니다. 여기

public function registerCompany($data){ 


    unset($this->User->validate['company_id']); 

    if($this->saveAll($data, array('validate'=>'only'))){ 
    if($this->saveAssociated($data)){                          
     return true; 
    } 
}else{ 

      return false; 
     } 
    } 

는 사용자 모델의 유효성 검사 규칙 중 일부는, REST 서비스 및 웹 클라이언트에 대한 두 가지 검증 종류가 있습니다, 그래서이는 다음과 같습니다 요청으로

, 나는뿐만 아니라 모델 논리를 제공 웹 클라이언트 전용. 참고 :이/편집 생성 한 사용자의 모든 선한 일 :

$ this->의 validate = 배열 ​​(

  'name'=>array(
     'Insert user name'=>array(
      'rule'=>'notEmpty', 
      'message'=>'Insert user name', 
      'last'=>false 
     ) 
     ) 
+0

당신이 모델의 검증을 선언 한 방법

다음, 케이크의 문서에 따르면, 당신이 구문을 사용한다 유효성 검사를 설정 해제하는? 이 코드도 우리에게 보여줄 수 있습니까? – ylerjen

+0

친애하는 @ Miam84, 방금 모델의 논리로 질문을 업데이트했습니다. 많은 감사드립니다. – Domas

+0

이것은 컨트롤러 코드입니다 (도움이됩니다). 'Model/User.php' 파일에서'User model'의 코드를 의미했습니다.$ validate 배열을 설정하여 모델 유효성을 확인 했어야합니다 – ylerjen

답변

1

사용이 검증 :

는 "회사의 데이터를 저장하는 가정 컨트롤러 ".

if($this->Company->saveAll(array('validate'=>only)){ 
      //your save logic here 
    } else { 
     //here form has some validation errors. 
     debug($this->Company->validationErrors); 
    } 

이 어떤 대답 해보십시오 ....

가 같은 당신이 할 수있는"사용자 " 사용자 데이터 형식에서는 사용이

if($this->User->saveAll(array('validate'=>only)){ 
      //your save logic here 
    } else { 
     //here form has some validation errors. 
     debug($this->User->validationErrors); 
    } 

그리고

:

echo $this->Form->input('User.name', array('label'=>__('Name*'))); 
+2

질문에 썼 듯이이 옵션을 완전히 알고 있지만 검증을 적용하는 자연스러운 방법처럼 보이지 않습니다. – Domas

+0

양식 작성시 오류가 하나 발견되어 답변을 추가했습니다. 봐. 아니면 왜 "0"을 추가했는지 말해주세요. 다른 목적으로 추가 할 수 있습니다. –

+0

그건 cakePHP에있는 HasMany에 대한 양식을 만드는 자연스러운 방법으로 케이크에 관한 모든 것을 읽을 수 있습니다. – Domas

0

saveAllsaveManysaveAssociated의 래퍼이다. 따라서 두 가지 방법 모두를 호출 할 필요가 없습니다. $this->Model->AssociatedModel->validate...

은 다음과 같아야합니다 :

public function registerCompany($data){ 
    unset($this->Company->User->validate['company_id']); 
    if($this->Company->saveAssociated($this->request->data)){                     
     return true; 
    }else{ 
     return false; 
    }  
}