У меня есть сущность, названная Lead, которая содержит марку автомобиля, модель и т. Д., И этот Lead сопоставляется отношением Many to One к объекту клиента, который имеет имя, фамилию и т. Д. т.е. клиент может иметь много ссылокКак заполнить форму Zend из модели Doctrine со многими отношениями?
Я создал функцию ToArray, которая получает данные из свинца,
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.
EDIT
Я установил мою проблему с помощью следующего метода:
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 \ Entity \ Client", каскад = { "упорствовать"}) * */ \t защищенный $ клиент; Должно быть возможно получить его из сущности доктрины. – Quanano
сделать print_r ($ record-> toArray()); если вы обнаружите, что данные уже там, то проверьте, переопределяет ли что-то в форме значения и/или что ключ массива соответствует имени поля. – redmoon7777
Массив включает прокси-объект для объекта Client. Это доступ к этому, что является проблемой. Я бы подумал, что заполнение формы из объекта доктрины с сопоставлениями с другими объектами является общей чертой. Должно быть, это лучший способ сделать это, но я не могу найти примеров. – Quanano