ビュースクリプトは、大きく分けてHTMLの全体構造を格納したBlogViewと、管理画面用のAdminViewの2つに分かれます。
前述したように、Blog ControllerではビュースクリプトとしてBlogView.phpが指定されていました。BlogView.phpは、ブログ全体のレイアウトを決定するもので、HTMLのdivタグで、ヘッダ/フッター/サイドバー/コンテンツといった4つの部分に分け、中身はそれぞれ個別のPHPスクリプトへ委譲しています(リスト10)。このように、ビュースクリプトの中でさらに別のビュースクリプトをrenderで読み込む場合でも、assignされた変数などはそのまま受け継がれます。
<div id="page">
<div id="header">
<?php echo $this->render('Pages/Blog/Header.php'); ?>
</div>
<div id="sidebar">
<div id="sidebarInt">
<?php echo $this->render('Pages/Blog/Sidebar.php'); ?>
</div>
</div>
<div id="content">
<div id="contentInt">
<?php echo $this->render('Pages/Blog/Index.php'); ?>
</div>
</div>
<div>
<?php echo $this->render('Pages/Blog/Footer.php'); ?>
</div>
</div>
コンテンツを表示する「Pages/Blog/Index.php」では、assignされた$model配列に含まれるposts変数に対して、foreach文の処理が行われています(リスト11)。posts変数にはブログの各エントリ(=post)が配列で代入されているので、各エントリの表示がプレゼンテーションロジックを通してこのスクリプト内で行われるわけです。
<?php
foreach ($this->posts as $post) {
?>
<div class="entry"><h2><?php echo $post['title']; ?></h2>
<div class="info"><div class="date">Written on <?php echo date('F d, Y', $post['published']); ?>
:
:
AdminView.phpでは、ログイン画面の表示しか行っていません(リスト12)。ログイン後の画面は「Pages/Admin/Posts.php」のビュースクリプトでレンダリングされます。「Pages/Admin/Post.php」は、Admin Controllerの項で説明したHTMLフォームからの受け渡しを行うビュースクリプトとなります。
<form method="post">
<?php
foreach ($this->errors as $error) {
echo '<span style="color: red;">' . $error . '</span><br/>';
}
?>
Title:
<?php
echo $this->formText('title', $this->post['title'], array('size' => 60));
?>
<br/>
Content:<br/>
<?php
echo $this->formTextarea('content', $this->post['content'], array('cols' => 60, 'rows' => 20));
?>
<br/>
Tags:
<?php
for($i = 0; $i < 5; $i++) {
echo $this->formText('tags[]', $this->post['tags'][$i]);
}
?>
<br/>
<input type="submit" id="save" name="save" value="save"/>
<input type="submit" id="delete" name="delete" value="delete" onclick="return confirm('Are you sure?');"/>
</form>
このHTMLフォームは、コントローラの中で指定したヘルパーを利用しています。「$this->formText」のように参照して、idとなる名称と編集の場合に表示されるvalue、フォームのサイズをarrayで渡しています。
Copyright © ITmedia, Inc. All Rights Reserved.