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);
客戶端數據已經是記錄的一部分,由於在原則中的映射關係, /** * 客戶@var * @ManyToOne(targetEntity = 「S2 \實體\客戶端」,級聯= { 「堅持」}) * */ \t保護$客戶端; 應該可以從教義實體得到它。 – Quanano 2012-01-02 19:56:31
做一個print_r($ record-> toArray());如果您發現數據已經存在,請檢查表單中是否有重寫值和/或數組鍵是否與字段名稱匹配。 – redmoon7777 2012-01-02 19:59:45
該數組包含客戶端實體的代理對象。它正在訪問這是問題。 我會想到,從與映射到其他實體主義實體填充一個形式是共同的特點。這樣做必須有一個最佳實踐方式,但我找不到任何例子。 – Quanano 2012-01-02 20:16:41