2013-10-04 6 views
0

저는 BlocksController와 Block 모델을 가지고 있습니다. 에서 편집 작업을 사용하여 응용 프로그램의 블록을 편집했는데 문제가 없습니다.CakePHP 마이그레이션으로 인해 추가 편집처럼 동작합니다.

1.3 및 2.x로 마이그레이션 한 후 편집 작업으로 인해 편집 된 블록이 새 레코드로 저장되는 것으로 나타났습니다.

cakePHP docs에서 나는 1.3에서 폼의 도우미가 더 이상 id를 제공하지 않으므로 모델이 프로세스를 add로 간주한다고 읽었습니다.

다음과 같이 I는 편집중인 블록의 ID 값으로 ID라는 숨겨진 필드를 추가하려고이 문제를 해결하려면

<?php echo $this->Form->create('Block', array('class' => 'nice custom'));?> 
//The following line is required in cakephp 1.3+ 

<?php echo $this->Form->hidden('id', array('value' => $block['Block']['id']));?> 

설명 된 용액이 잘 작동한다. 그러나 나는보기에서 변경하지 않고 그것을 할 다른 방법을 알아야합니다. 가능합니까?

+0

문서와 구운 코드 모두에서 제안하는 간단한'echo $ this-> Form-> input ('id')'의 잘못된 점은 무엇입니까? – mark

+0

@mark 그냥 숨겨진 양식 요소로 인쇄 할 수 없다는 것을 깨달았습니다. – SaidbakR

답변

2

TLDR

는 원하는 작업을 수행하는 한 가지 방법이 될 것입니다. 가장 이상적인 해결책은 당신이 언급 한 것과 비슷한 방식으로 ID를보기에 추가하는 것입니다. 그러나 당신이 생각할 수있는 많은 옵션이 있습니다. 보기 쉬운 (내가 이상을 주장) 솔루션은 단지보기에 ID를 추가하는 것입니다

에서


. 당신은 다음과 같이 추가 할 수 있어야한다 :

echo $this->Form->input('id'); 

그것은 그것 "ID"그리고 당신이보기에 데이터를 올바르게 전달하는 경우뿐만 아니라 당신을 위해 채워야하기 때문에 자동으로 숨겨 있습니다. 컨트롤러

하지만에서


- 귀하의 질문에보기에 NOT을 수행하는 방법을 때부터, 또 다른 옵션은 컨트롤러에 그것을 할 것입니다. 정확한 프로젝트를 모르므로 적절하게 변경하십시오. 저장하기 전에 블록의 id을 데이터에 추가하면됩니다.

$this->request->data['Block']['id'] = $YOUR_ID; 
$this->Block->save($this->request->data); 
모델

이 이상한 장소처럼 보이지만에서


- 당신을 당신이 세션이나 뭔가의 ID를 저장하는 경우, 당신은 이론적으로 저장하기 전에 여기에 ID를 추가 할 수 있습니다 잘.