0

私のフォームの 1 つで、投稿タグのテキスト入力があります。現時点では、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'); ?>

nameの代わりにタグのフィールドを出力するように CakePHP に指示する方法はありidますか? ありがとう。

4

2 に答える 2

1

タグ モデルで $displayField を設定しましたか?

例えば。

public $displayField = "name";
于 2013-01-12T14:08:32.980 に答える
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

于 2013-01-09T19:31:25.570 に答える