Как мне заполнить форму Zend из модели доктрины отношениями «многие к одному»? - PullRequest
1 голос
/ 02 января 2012

У меня есть настройка объекта, называемая Lead, которая содержит марку автомобиля, модель и т. Д., И этот Lead сопоставляется отношением «многие к одному» с клиентом, который имеет имя, фамилию и т. Д. т. е. у клиента может быть много отведений

Я создал функцию toArray, которая получает данные из Lead,

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);

1 Ответ

0 голосов
/ 02 января 2012

попробуй:

$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);
...