2015-03-26 2 views
0

У меня есть простая форма редактирования, которая предварительно выбирает выбранные значения без каких-либо проблем. Но есть одно поле ввода, которое содержит объекты из класса ContactPerson. Я хочу показать prename и lastname в представлении, поэтому я создал виртуальное поле под названием fullname. Проблема в том, что CakePHP не выбирает его при открытии представления. классПредварительно выберите значение в режиме редактирования в CakePHP при использовании виртуальных полей

ContactPerson:

id 
prename 
lastname 
fullname (virtual field for prename . " " . lastname) 

Изменение метода в контроллере:

$contact_persons = $this->Product->ContactPerson->find('list', array('fields' => array('id','fullname'), 'order' => array('fullname' => 'asc'), 'conditions' => array("not" => array ("fullname" => ' ')))); 
$this->set(compact('contact_persons')); 

Вид:

echo "<div class='control-group'>"; 
echo $this->Form->label('contact_person_id', 'Contact Person:', 'control-label'); 
echo "<div class='controls'>"; 
echo $this->Form->input('contact_person_id', array('class' => 'select-input', 'empty' => 'Choose Contact Person', 'options' => $contact_persons)); 
echo "</div>"; 
echo "</div>"; 

В связи с тем, что я использовал виртуальное поле для ContactPersons, он не предварительно выбирает его в окне редактирования. Как я могу сказать CakePHP, что определенный объект должен быть предварительно выбран при использовании виртуальных полей?

ответ

0

Добавьте это в ContactPerson Модель:

public $displayField = 'fullname'; 

Cake использует поле дисплея, чтобы определить, какое поле использовать для заполнения выбирает сгенерированные формы помощника прочь тип списка находит. Если вы не установите displayField, он будет использовать идентификатор.

- Для поля вытащил из соответствующей модели

Не тестировался, но я думаю, что вы должны быть в состоянии установить displayField на лету для вашей модели продукта - который является тот, который вы используете в этом сценарии.

Добавьте следующий к контроллеру:

$this->Product->displayField = 'fullname'; 

Просто, прежде чем сделать свою находку. Вам нужно сделать это в методе контроллера, поскольку у вас могут быть другие методы для продукта, которые не извлекают данные из ContactPerson.

+0

Спасибо, Саймон, но это не исправить проблему. – doonot

+0

Извините, я просто заметил, что вы тянете к Продукту из родственной модели. Обновленный ответ. –

+0

Все еще не успех :( – doonot

Смежные вопросы