2013-11-25 1 views
0

안녕하십니까.
나는 symfony 1.4과 함께 임베디드 양식에 대한 커뮤니티를 구합니다.
의 관계를 가진 두 모델이 있습니다.
양식을 표시하기 전에 첫 번째 모델과 모든 종속성을 생성합니다.
modelb: Unexpected extra form field named "0". Unexpected extra form field named "1". Unexpected extra form field named "2". Unexpected extra form field named "3". Unexpected extra form field named "4". Unexpected extra form field named "5". Unexpected extra form field named "6". Unexpected extra form field named "7". Unexpected extra form field named "8". Unexpected extra form field named "9". Unexpected extra form field named "10". Unexpected extra form field named "11". 나는 또한 embedRelation()으로 노력하고 내가 같은를 가지고 :
나는 항상 이러한 오류를 얻을.
SF 1.4 embedform에서 예기치 않은 여분의 양식 필드 (테이블 업데이트)

ModelA: 
    columns: 
    model_d_id: { type: integer, notnull: true } 
    comments: { type: string(1024), notnull: false } 
    relations: 
    ModeleD: ... 

ModelB: 
    columns: 
    model_a_id: { type: integer, notnull: true } 
    model_b_id: { type: integer, notnull: false } 
    model_c_id: { type: integer, notnull: true } 
    is_selected: { type: boolean, notnull: true } 
    relations: 
    ModelA: 
     class: ModelA 
     local: model_a_id 
     foreign: id 
     onDelete: CASCADE 
     foreignAlias: ModelB 
    ModelB: ... 
    ModelC: ... 

그래서 형태로 나는 commentsModelA의 업데이트 및 관련 ModelB의 각 항목에 대해 is_selected에 대한 확인란을 가질 수있게하려면 : 다음은 두 모델 스키마의 요약이다 현재 ModelA.

:

여기
class ModelBForm extends BaseModelBForm 
{ 
    public function configure() 
    { 
    unset($this['model_a_id'], $this['model_b_id'], $this['model_c_id'], $this['updated_at']); 

    $model_a = $this->getObject(); 

    $this->setWidget('is_selected', new sfWidgetFormInputCheckbox(
     array('label' => $model_a->ModelC->getName()), 
     array() 
    )); 
    $this->setValidator('is_selected', new sfValidatorBoolean()); 
    } 
} 

이전 임베디드 형태의 모음입니다 : 여기

[] modele_b_entry_name_1 [] modele_b_entry_name_2 [] modele_b_entry_name_3 text [_______________________________] [ Submit ] 

의 코드가 내장 된 형태입니다 :
여기 처럼 형태가 모습입니다
class ModelBCollectionForm extends sfForm 
{ 
    public function configure() 
    { 
    $all_model_b = Doctrine_Query::create() 
     ->from('ModelB p') 
     ->where('p.model_a_id = ?', $this->getOption('model_a_id')) 
     ->execute(); 

    foreach ($all_model_b as $index => $model_b) { 
     $form = new ModelBForm($model_b); 
     $this->embedForm($index, $form); 
    } 
    } 
} 

그리고 지금 글로벌 양식 :

class ModelAForm extends BaseModelAForm 
{ 
    public function configure() 
    { 
     unset($this['created_at'], $this['model_d_id']); 

     $subForm = new ModelBCollectionForm(null, 
      array('model_a_id' => $this->getObject()->getId()) 
     ); 
     $this->embedForm('allmodelb', $subForm); 
    } 
} 

템플릿은 양식을 간단하게 보여줍니다.
은 그래서 첫 번째 조치는 테이블의 기존 항목과 함께 양식을 표시하며,이 양식을 제출할 때 다음, 여기에 코드입니다 :

public function executeCreate(sfWebRequest $request) 
{ 
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT)); 
    $this->form = new ModelAForm(); 
    var_dump($request->getParameter($this->form->getName())); 
    $this->form->bind($request->getParameter($this->form->getName())); 
    foreach($this->form->getErrorSchema()->getErrors() as $key => $error) 
    { 
    echo '<p>' . $key . ': ' . $error . '</p>'; 
    } 
    var_dump($this->form->getValues()); 
} 

첫 번째 var_dump() 좋은 datas와 완전한 배열을 보여줍니다. 두 번째 것은 비어 있습니다.
나는 몇 시간 동안 작업을하고 있지만 성공하지 못했습니다. 은 POST 데이터가 인 양식을 바인드합니다.

도움 주셔서 감사합니다.

편집 : 바인딩 메서드를 재정의하려고했으나 작동하지 않았습니다 ... ModelB 데이터를 해제했지만 다음에 save() 메서드가 UPDATE 대신 INSERT를 수행하는 경우를 제외하고는.

답변

0

내 문제가 해결되었습니다.
해결책은 다음과 같습니다.

public function executeCreate(sfWebRequest $request) 
{ 
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT)); 

    $model_a_array = $request->getParameter('model_a'); 
    $id_model_a = $model_a_array['id']; 
    $model_a = Doctrine::getTable('ModelA')->find($id_model_a); 
    $this->form = new ModelAForm($model_a); 

    $this->form->bind($request->getParameter($this->form->getName())); 
    if($this->form->isValid()) { 
    $this->form->save(); 
    } 
} 
관련 문제