Можете ли вы рассказать мне, как использовать директиву DisplayField CakePHP? Я не могу понять, как его использовать.
Итак, в файле модели у меня есть следующий код:
<?php class Task extends AppModel { var $name = 'Task'; var $displayField = 'projectName'; //The Associations below have been created with all possible keys, those that are not needed can be removed var $belongsTo = array( 'User' => array( 'className' => 'User', 'foreignKey' => 'user_id', 'conditions' => '', 'fields' => '', 'order' => '' ...
Как я могу использовать это, чтобы отобразить поле projectName
в поле выбора формы?
Итак, у вас есть Task belongsTo Project
(FK: project_id). Вы хотите сделать окно выбора проекта в задачах / добавлении и задачах / редактировать представления.
Проблема заключается в том, что в таблице проектов нет поля, называемого name
или title
поэтому поле выбора пусто. У вас не было бы проблем, если бы было name
или поле title
, верно?
Ну, вот решение, в модели проекта добавьте это:
var $displayField = 'projectName';
http://book.cakephp.org/view/71/Model-Attributes
Итак, вы шли в правильном направлении, немного испортили модели. Надеюсь, вы сейчас это понимаете;]
В основном вы можете это сделать (в контроллере):
$this->set('tasks', $this->Task->find('list'));
И сделайте ввод с именем task_id и убедитесь, что он является полем выбора, поэтому (в представлениях):
echo $form->input('task_id', array('label' => 'youLabelHere', 'type' => 'select'));
displayField дает вам возможность выбрать, какое поле будет использоваться как отображаемый параметр (один из) в поле выбора, если он не указан в модели, сценарий будет искать «имя» или «название».
Если вы не хотите отображать проекты в пользовательских формах (добавьте, отредактируйте параметр), ваши ассоциации будут неправильными. Всегда убедитесь, что существует ассоциация (с хорошими, обычными таблицами и именами клавиш) между двумя моделями, когда вы хотите сделать выборку, Cake делает ее такой же простой, как и она.