2012-01-02 86 views
1

我有一個名爲鉛實體設置,其中包括汽車製造商,型號,等等,這是鉛由許多映射到一個客戶端實體,它具有的forName,姓等 一個關係,即客戶可以有很多線索如何從具有多對一關係的Doctrine模型中填充Zend表單?

我創建了一個指定者功能,從引線獲取數據,

public function toArray() 
{ 
    $record_data = get_object_vars($this); 
    $formatted_record_data = array(); 
    foreach($record_data as $name=>$value){ 
     if (is_object($value)){ 
      if (get_class($value) == 'DateTime') { 
       $value = $this->datetimeToString($value); 
      } else { 
       $value = $value->toArray(); 
      } 
     } 
      $formatted_record_data[$this->from_camel_case($name)] = $value; 
    } 
    return $formatted_record_data; 
} 

,然後使用填充一個Zend形式:

$record = $this->_em->getRepository($this->_entity)->find($this->_primaryId); 
$form->setDefaults($record->toArray()); 

這工作正常的場領導實體被填充,但它不填充基於客戶的字段,例如的forName。

編輯

我已經固定我的問題通過下面的方法:

1)添加下面的方法來更新我的行動。

$this->_record = $this->_em->getRepository($this->_entity)->find($this->_primaryId); 
$this->_form->setRecord($this->_record); 
$this->view->form = $this->_form; 

2)添加下面的方法來我的表型

public function setRecord($record) 
{ 
    $data = array('registration' => $record->registration, 
       'make' => $record->make, 
       'model' => $record->model, 
       'pav' => $record->pav, 
       'salvage_value' => $record->salvageValue, 
       'forname' => $record->client->forname, 
       'surname' => $record->client->surname, 
       'vehicle_address1' => $record->vehicleAddress1, 
       'vehicle_address2' => $record->vehicleAddress2, 
       'vehicle_address3' => $record->vehicleAddress3, 
       'vehicle_address4' => $record->vehicleAddress4, 
       'vehicle_address5' => $record->vehicleAddress5, 
       'vehicle_postcode' => $record->vehiclePostcode, 
       'category' => $record->category, 
       'colour' => $record->colour 
    ); 
    $this->setDefaults($data); 
} 

這樣我可以手動獲取相關數據,在這種情況下:

'forname' => $record->client->forname, 
'surname' => $record->client->surname, 

,並把它們添加到表格使用:

$this->setDefaults($data); 

回答

0

嘗試:

$leads = $record->toArray(); 
$client_info = array('name' => 'test', 'surname' => 'test 2'); // or if from db use what you did for the leads. 

$defaults = array_merge($leads, $client_info); 

$form->setDefaults($defaults); 
+0

客戶端數據已經是記錄的一部分,由於在原則中的映射關係, /** * 客戶@var * @ManyToOne(targetEntity = 「S2 \實體\客戶端」,級聯= { 「堅持」}) * */ \t保護$客戶端; 應該可以從教義實體得到它。 – Quanano 2012-01-02 19:56:31

+0

做一個print_r($ record-> toArray());如果您發現數據已經存在,請檢查表單中是否有重寫值和/或數組鍵是否與字段名稱匹配。 – redmoon7777 2012-01-02 19:59:45

+0

該數組包含客戶端實體的代理對象。它正在訪問這是問題。 我會想到,從與映射到其他實體主義實體填充一個形式是共同的特點。這樣做必須有一個最佳實踐方式,但我找不到任何例子。 – Quanano 2012-01-02 20:16:41

相關問題