2011-03-24 3 views
0

사용자가 초대를 통해 액세스 할 수있는 등록 양식이 있습니다. 예를 들어 초대 된 사용자는 /users/register/[invite_code]으로 이동하여 부분적으로 채워진 등록 양식을받을 수 있습니다. 예상하지 못한 것을보고 있습니다.초기 양식로드시 확인 수행

초대 코드가 유효하면 양식이 자동으로 미리 채워지도록 $this->data에 사용자 구조를 반환하고 설정합니다. 미리 채우기가 작동하지만 양식이로드되면 양식을 제출 한 것처럼 데이터 유효성 오류가 표시됩니다. 값이 미리 채워지면 많은 [필드 이름]을 비울 수 없습니다.

질문에 대한 응답으로 등록 작업이 표시되고 양식을 제출하는 데 모두 호출됩니다. 코드는 다음과 같습니다.

public function register($invite = null) { 
    # Handle a submitted registration 
    if(!empty($this->data)) { 
    # Do stuff... 

    if($this->User->save($this->data)) { 
     $this->Session->setFlash('Welcome. Thanks for registering.', null, null, 'success'); 
     $this->redirect($this->Auth->redirect()); 
    } 
    else { 
     $this->Session->setFlash('Oh noz. There\'s a problem with your registration.', null, null, 'validation'); 
    } 
    } 

    # If an invite is passed, pull the user attached to that invite. 
    if(!empty($invite)) { 
    # Attempt to pull the user that owns the invite 

    if(empty($user)) { # Unrecognized invite code 
     # Do stuff... 
    } 
    else { # Invited user found 
     if(!empty($user['User']['password'])) { # Invited user has already registered 
     # Do stuff... 
     } 
     else { # This is the invited user 
     $this->data = $user; 
     } 
    } 
    } 
} 

감사합니다. 내가 $this->data에 사용자를 할당 할 때

다시이 오는 후 UPDATE

는 문제가 온다. 제거 할 때 유효성 검사 오류가 없습니다. 불행히도 사전 인구도 없습니다. 후자가 필요하므로 오류 메시지를 표시하지 않고 데이터 포인트를 설정하는 방법을 찾아야합니다. 2

I가 $this->User->invalidFields() 덤프 경우

UPDATE는, 심지어 초기 UsersController::beforeFilter()의 첫 번째 줄의 배열 다란 채워져있다. 이것이 어떻게 가능한지? 이 문제를 일으키는 요청에서 일찍 무엇을 할 수 있습니까?

UPDATE 3

나는 또한 내가 UsersController::beforeFilter()를 입력 할 때, $this->User->id의 값이 이미 설정되어있는 것으로 나타났습니다. 나는 어디에서, 왜 그런지 모르지만 이것은 중요해 보입니다. 내가 아는 한, 실제 응용 프로그램 코드의 첫 번째 단계는 관련 컨트롤러의 beforeFilter 메서드이고 사용자 ID는 입력 할 때 설정됩니다.

+0

코드를 표시 할 수 있습니까? 유효성 검사 오류 – kaklon

+0

코드와 몇 가지 추가 발견 사항이 위에 추가 된 경우 데이터를 제출해야합니다. –

답변

0

컨트롤러 loadModel() 함수 블록을 입력 할 때, 컨트롤러에서 확인할 수 있습니다 불행하게도, 당신의 행동에 첫 번째 매개 변수에 따라 모델의 id 속성을 설정합니다. 그것은 CakePHP 2.0에서 제거 된 큰 성가심입니다. 그럼에도 불구하고 ID를 설정 한 후 자동으로 필드의 유효성을 검사하는 코드가 없으므로 자동 유효성 검사를 처리하는 구성 요소가 있거나 모델을 만들 때 수행 할 코드가 사용자 모드에있는 것 같습니다.

자동으로 데이터의 유효성을 검사하는 코드를 찾을 수 없거나 변경하지 않으려면 컨트롤러에서 loadModel()을 재정 의하여 ID 할당을 제거하거나 작업에 명명 된 매개 변수를 사용하는 것이 좋습니다. .

+0

와우, 정말로? 미친 것처럼 보이지만 ID를 설정해도 유효성 검사가 발생하지 않는다면 문제가되지 않을 것입니다. 명백한 "auto-validation"에 대해 이상한 점은'Model :: validates()'가 코어에서 호출되고 아무 것도 쓰여지지 않는 모든 곳에서 로그 프린트를 삭제했다는 것입니다. 이것이 어디에서 일어날 지 모른다. –

0

1) 처음 $ this-> data를 $ this-> > 모델 -> 저장 하시겠습니까?

+0

No.데이터가'$ this-> data'에 제출 된 경우에만 저장이 발생합니다. 처음 URL을 치면 그 조건부 블록에 들어 가지 않습니다. 위의 코드를 참조하십시오. –

0

이상한데, 이미 문제없이했습니다. 제가 올바르게 이해한다면, 폼이 표시되는 것이 마지막 것입니다. 검증이 이미 실패하면이

echo debug($this->User->invalidFields()); 
+0

흥미롭게도, 필드는'register()'메소드를 입력하자마자 무효입니다. 내가 다른 모든 것들을 찢어 버린다 할지라도. 나는 그것을 기대하지 않았으므로 파기가 필요합니다. –

+0

그건 내가 의심해 본 것입니다. 데이터를 제출할 수있는 리디렉션이 없습니까? – kaklon

+0

나는 그렇게 생각하지 않는다. 그러나 그것들은 유명한 마지막 단어 다. ..--) –

관련 문제