0

在我的一种形式中,我有一个帖子标签的文本输入。目前,Cake 正在将标签 id 返回到此字段中,而不是标签的名称。我想更改它以显示标签的名称。

帖子控制器得到如下结果:

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

4

2 回答 2

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 中的 find 示例将返回tag1 tag2 tag3.

于 2013-01-09T19:31:25.570 回答
1

您是否在标签模型中设置了 $displayField ?

例如。

public $displayField = "name";
于 2013-01-12T14:08:32.980 回答