2012-06-26 2 views
0

CakePHP2에서 작성한 양식에 데이터가 게시되지 않은 경우 비워 두되 세션 키 Person.id가있는 경우 모델의 데이터로 채워지기를 원합니다. 내 코드는 다음과 같습니다.세션에서 ID를 사용하여 CakePHP에서 양식 필드 채우기

function about() { 
    // Make session key for debug purposes 
    $this->Session->write("Person.id",1); 
    if($this->request->is('post')) { 
     debug("post"); 
    } else { 
     debug("not post"); 
     // Use the value in the session Person.id to find the 
     // record in the Person model 
     $this->params->data = $this->Person->findById($this->Session->read("Person.id")); 
    } 
} 

위의 대부분이 작동합니다. 데이터를 게시하지 않고 뷰에 액세스하면 양식에 예상대로 Person 모델의 데이터가 채워집니다.

그러나 양식을 게시하면 post을 예상했을 때 여전히 디버그 메시지 not post이 표시됩니다.

$this->params->data에 데이터를 할당하는 줄을 주석으로 작성한 경우 양식을 제출하면 정확한 디버그 메시지 post이 표시되지만 왜 이런 일이 발생하는지 이해할 수 없습니다.

$this->params->data이 채워진 경우 양식 게시와 동일한 의미를 지니는 경우 실제 양식을 확인하려면 어떻게해야합니까?

UPDATE : 다음은 I가 원하는 방법을 정확하게 작동합니다 ....하지만 난 아직도 이유를 이해하지 내가 변경하는 경우 if($this->request->is('post'))if($this->request->data)에.

CakePHP2에서

답변

1

,

<input type="hidden" name="_method" value="PUT"/> 

당신이 기록 편집

(기본 키 의미가 설정되어있는) 당신이 FormHelper로보기에서 양식을 작성, 그것은 automatically generates이 필드.

양식을 제출할 때이 숨겨진 필드는 HTTP 메서드보다 우선하며 요청은 POST가 아니라 PUT으로 간주됩니다. 이 같은 테스트를 업데이트 할 수 있습니다 :

:

if($this->request->is('put')) { 
    ... 
} 

또는 방금 요청을 디버깅, 스스로를보고 싶은 경우 bake

if($this->request->is('post') || $this->request->is('put')) { 
    ... 
} 

를 사용할 때 얻을 수있는 코드를 반영하기 위해

debug($this->request); 

그럼 토픽이 약간 모자라지만 세션의 "Person.id"키가 로그인 한 사용자 인 경우 아마도 사용자 정의 메커니즘을 사용하여 사용자를 로그인/로그 아웃하면 아마도 가치가있을 것입니다 AuthComponent을보고 있습니다.

+0

큰 설명, 감사합니다! 'Person.id'는 실제로 제출 된 이메일 주소를 기반으로 레코드의'id'에 대한'Person' 모델을 검색하는 쿼리의 결과입니다. 위의 코드를 다중 단계 제출 양식의 일부로 사용하고 있습니다. 각 단계가 제출 될 때마다 데이터가 데이터베이스에 저장되지만 사용자가 이전 단계로 돌아 가기로 결정한 경우 데이터를 다시 양식으로 가져 오는 방법이 필요했습니다. – Joseph

관련 문제