アットウィキロゴ

Postのビュー

 ビューではviewアクションの結果表示される内容の関連部分に注目して見てみる。

blog\views\posts\view.html

<div class="related">
<h3>Related Comments</h3>
<?php if(!empty($post['Comment'])):?> ←①
<table cellpadding="0" cellspacing="0">
<tr>
<?php foreach($post['Comment']['0'] as $column => $value): ?> ←②
<th><?php echo $column?></th>
<?php endforeach; ?>
<th>Actions</th>
</tr>
<?php foreach($post['Comment'] as $comment):?> ←③
<tr>
	<?php foreach($comment as $column => $value):?>
		<td><?php echo $value;?></td>
	<?php endforeach;?>
	<td class="actions">
		<?php echo $html->link('View', '/comments/view/' . $comment['id']);?>
		<?php echo $html->link('Edit', '/comments/edit/' . $comment['id']);?>
		<?php echo $html->link('Delete', '/comments/delete/' . $comment['id'], null, 'Are you sure you want to delete: id ' . $comment['id'] . '?');?>
	</td>
</tr>
<?php endforeach; ?>
</table>
<?php endif; ?>

<ul class="actions">
	<li><?php echo $html->link('New Comment', '/comments/add/');?> </li>
</ul>
</div>

 PostControllerのviewアクションは、以前と変わらず「$this->set('post', $this->Post->read(null, $id));」しか実装されていない。

 ここで重要なのは、モデルで関連を作成したことで、readの結果で全ての関連先が関連先が参照可能になっているということ。readやfindAllの結果、自分のモデルは「$post['Post']['id']」のように参照可能だった。つまり、「$post[モデル名][カラム名]」という構文通り、関連先であっても同じように表現できる(①)。

 関連先が単一(belomgsToやhasOne)である場合は、「$post[モデル名][カラム名]」で参照可能。一方、関連先が複数(hasManyhasAndBelongsToMany)である場合は、「$post[モデル名][行番号][カラム名]」で参照可能。

 関連先のモデルのカラム名はどの行でもキーになっているので、ひとまず「$post['Comment']['0']」(②)にように1行目(1行目は0から始まる)のキー名を表の列タイトルにしている。

 関連先のデータのリストアップは関連先の行数分繰り返すことで全件表示することができる(③)。繰り返しブロック中では「$comment[カラム名]」とすることで値へのアクセスが可能。
最終更新:2007年05月17日 14:20