2010-02-02 56 views
2

你能告诉我如何使用CakePHP的displayField指令吗?我无法弄清楚如何使用它。CakePHP displayField usage

所以,在一个模型文件,我有以下代码:

<?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

回答

0

基本上可以做到这一点(在控制器):

$this->set('tasks', $this->Task->find('list')); 

,并与名称TASK_ID的输入,并确保强制它是一个选择框,所以(在视图):

echo $form->input('task_id', array('label' => 'youLabelHere', 'type' => 'select')); 

displayField让您有机会选择将哪个字段用作选择框中的显示选项(其中之一),如果未在模型中提供该字段,脚本将查找“名称”或“标题”。

如果你不想在用户窗体中显示项目(添加,编辑选项),那么你的关联是不正确的。当你想创建一个选择框时,总是要确保两个模型之间有一个关联(具有良好的常规表和键名称),Cake使它尽可能地容易。

+0

还是不明白......你能再次帮我一步一步吗? – user198003 2010-02-02 17:19:36

+0

也许再解释一下,你想要做什么。告诉我涉及的模型,我一定会从那里帮助你。 – PawelMysior 2010-02-02 17:23:34

+0

所以我有两个表格 - “项目”和“任务”。当然,table'task'有辅助键,名为'project_id'。 我只需要构建简单的窗体窗体,它将用于任务插入/编辑操作。该表单将包含select-option表单字段,其中来自表项目的项目。 问题是表'project'有一个叫'projectName'的字段,我很喜欢把这个字段放到选择菜单中。 如果'projectname'字段被称为'name'或'title',一切都会变得简单...... 希望你能理解我... – user198003 2010-02-02 18:18:47

2

所以,你有Task belongsTo Project(FK:project_id)。您想要在任务/添加和任务/编辑视图中创建项目选择框。

问题是项目表没有一个名为nametitle的字段,因此选择框为空。如果有nametitle字段,您不会有任何问题,对吧?

好吧,这里的解决方案,在项目模型补充一点:

var $displayField = 'projectName'; 

http://book.cakephp.org/view/71/Model-Attributes

所以你在正确的方向打算,只是搞砸的车型一点。我希望你现在明白了;]

+0

没错,它的工作原理!谢谢! 只要告诉我,每次我重新创建模型,我都必须定义var $ displayField ='projectName'; ? – user198003 2010-02-02 18:32:59

+0

你是什么意思重新模型?具有'title'或'name'字段的表模型不需要,也可以不使用它们:'ModelName-> find('list');'你没有设置这个变量(仍然这是一个好主意)。请检查这个答案,以便这个问题得到解答。 – PawelMysior 2010-02-02 18:38:02