在我的一个表单中,我有一个文章输入的帖子标签。目前,Cake正在将标记ID返回到此字段而不是标记的名称。我想更改它以显示标签的名称。
posts控制器得到如下结果:
array(
'Post' => array(
'id' => '7',
'title' => 'Testing again',
'body' => 'wooooooo',
'created' => '2013-01-09 19:20:53',
'slug' => 'testing-again'
),
'Tag' => array(
(int) 0 => array(
'id' => '4',
'name' => 'tag1'
),
(int) 1 => array(
'id' => '3',
'name' => 'tag2'
),
(int) 2 => array(
'id' => '5',
'name' => 'tag3'
)
)
)
表格的格式如下:
<?php echo $this->Form->create('Post'); ?>
<?php echo $this->Form->input('Post.title'); ?>
<?php echo $this->Form->input('Post.body'); ?>
<?php echo $this->Form->input('Tag.Tag', array('type' => 'text', 'label' => 'Tags (seperated by space)')); ?>
<?php echo $this->Form->input('Post.slug'); ?>
<?php echo $this->Form->end('Save Changes'); ?>
我有没有办法告诉CakePHP输出标签的name
字段而不是id
?感谢。
答案 0 :(得分:1)
好的,从我从评论讨论中收集的内容来看,这就是你要找的东西。在你的控制器中,只需遍历帖子的所有设置标签。假设您的查找结果在$post
变量中设置,您可以使用以下代码并将它们全部保存在“普通”非递归数组中:
$tags = array(); // This will hold all the tags
foreach($post['Tag'] as $tag) {
$tags[] = $tag['name'];
}
// Set the tags as view variable
$this->set(compact('tags'));
然后在您的视图中,您可以使用空格implode
数组并将其设置为文本字段的值:
echo $this->Form->input('Tag.Tag', array('type' => 'text', 'label' => 'Tags (seperated by space)', 'value' => implode(' ', $tags)));
OP中的查找示例将返回值tag1 tag2 tag3
。
答案 1 :(得分:1)
您是否在代码模型中设置了$ displayField?
例如
public $displayField = "name";