使用虚拟字段时,在CakePHP的编辑视图中预选值

使用虚拟字段时,在CakePHP的编辑视图中预选值,php,html,cakephp,model-view-controller,Php,Html,Cakephp,Model View Controller,我有一个简单的编辑表单,可以预先选择选定的值,没有任何问题。但是有一个选择输入字段包含ContactPerson类中的对象。我想在视图中显示prename和lastname,所以我创建了一个名为fullname的虚拟字段。问题是,当我打开视图时,CakePHP没有预先选择它 联系人类别: id prename lastname fullname (virtual field for prename . " " . lastname) 控制器中的编辑方法: $contact_persons =

我有一个简单的编辑表单,可以预先选择选定的值,没有任何问题。但是有一个选择输入字段包含ContactPerson类中的对象。我想在视图中显示prename和lastname,所以我创建了一个名为fullname的虚拟字段。问题是,当我打开视图时,CakePHP没有预先选择它

联系人类别:

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'));
$this->Product->displayField = 'fullname';
视图:


由于我为联系人使用了一个虚拟字段,所以它不会在编辑视图中预先选择它。如何告诉CakePHP在使用虚拟字段时必须预先选择特定对象?

将此添加到ContactPerson模型中:

public $displayField = 'fullname';
Cake使用“显示”字段来确定要使用哪个字段来填充由表单帮助器生成的“脱离列表类型查找”选项。如果不设置displayField,它将使用id

-对于从相关模型中提取的字段

未测试,但我认为您应该能够为您的产品模型动态设置displayField,这就是您在本场景中使用的模型

将以下内容添加到控制器:

$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'));
$this->Product->displayField = 'fullname';

就在你找到之前。您需要在控制器方法中执行此操作,因为对于产品,您可能有其他方法无法从ContactPerson获取数据。

谢谢Simon,但这并没有解决问题。抱歉-我刚刚注意到您正在从相关型号获取产品。更新答案。