CakePHPのView部分をまとめてすっきりさせる

CakePHP
スポンサーリンク

前回、「CakePHPで入力値を取得・表示するだけのプログラム|1bit::memo」という記事を書きました。viewsの部分のヘッダ部分など、まとめたいな、と思う事がありますよね。それをまとめるための自分メモです。

/app/controllers/sample_controller.phpを少し改良

“`public $layout = "sample";“`

というコードを追加します。これは、「/app/views/layouts/sample.ctp」を見に行く、という意味になります。sample_controller.phpを修正すると、こんな感じ↓。

“`<?php
class SampleController extends AppController {

public $name = "Sample";
public $uses = null;
public $autoRender = true;
public $layout = "sample"; //←コレを追加
public $autoLayout = true; //←ここをtrueに変更

function index(){}

function result(){
App::import("sanitize");
$input = $this->data["name"];
$result = Sanitize::stripAll($input);
$this->set("result",$result);
}
}“`

また、その下の行の「public $autoLayout」をtrueに変更します。標準ではtrueになっているので、記述する必要はありませんが、もし「public $autoLayout = false;」となっていた場合は変更してください。

/app/views/layouts/sample.ctpのコードを追加

上の手順で「/app/views/layouts/sample.ctp」を追加したので、その中身を書きます。

“`<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>フォームの入力サンプル</title>
</head>
<body>
<?php echo $content_for_layout; //ここに、index.ctp、result.ctpの内容が表示される。 ?>
</body>
</html>“`

これで、ヘッダやフッタ部分が共通化されました。上記ソースにある

“`<?php echo $content_for_layout; ?>“`

の箇所に、index.ctp、result.ctpに表示するコードを記述します。

/app/views/sample/index.ctp

「/app/views/layouts/sample.ctp」を追加した事により、index.ctp、result.ctpのコードが減りました。以下のような感じ。

“`<h1>フォームの入力サンプル</h1>
<hr />
<?php echo $form->create(null, array(‘type’=>’post’,’action’=>’result’)); ?>
<table>
<tr>
<th>名前:</th>
<td><?php echo $form->input(‘name’, array(‘type’=>’text’, ‘div’=>false, ‘label’=>false)); ?></td>
</tr>
</table>
<?php echo $form->end(‘送信’); ?>“`

/app/views/sample/result.ctp

「/app/views/layouts/sample.ctp」を追加した事により、index.ctp、result.ctpのコードが減りました。以下のような感じ。

“`<h1>【結果】フォームの入力サンプル</h1>
<hr />
<p>あなたは<br /><strong>「<?php echo $result; ?>」</strong><br />と入力しました。</p>
<a href="./?phpMyAdmin=F5sxRMCczujvnYYfE491K6YXxZ7">入力画面へ戻る</a>“`

まとめ

前回の記事「CakePHPで入力した値を取得するだけのプログラム|1bit::memo」と表示結果は同じですが、view部分がまとまることで、訂正が入った時に修正する箇所が減りました。