使用表单帮助程序显示标记名称而不是ID

时间:2013-01-09 18:43:12

标签: php cakephp tags posts has-and-belongs-to-many

在我的一个表单中,我有一个文章输入的帖子标签。目前,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?感谢。

2 个答案:

答案 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";