【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

CakePHPでView内の共通部分を使いまわす方法

こんにちは。
開発の長谷です。

CakePHPでの開発をすることが多いのですが、
Viewを記述する際、今までずっとhead内やheader、footerなどの
共通部分を1つ1つのファイルに書き込んでいました。

ただ、このように書いてしまうと修正が必要になった場合、
1つ1つファイルを修正しないといけなくなったりして、とても大変で面倒です。。

このことからどうにかして共通部分を一纏めにできないかと思い色々と調べた結果、
方法を見つけましたので紹介します。

方法

1. 共通となるレイアウトのViewファイルをapp/View/Elements/ 配下に作成する

まず、app/View/Elements/ 配下に共通となるレイアウトを作成します。
ファイル名は通常のViewと同様{任意のファイル名}.ctpです。

今回はhead.ctp, header.ctp, footer.ctp としましょう。
通常のViewに書いていたhead, header, footerの部分をそれぞれコピペすればOKです。

ちなみに、app/View/Elements/ 配下にディレクトリを作成して、その下にViewファイルを置くことも可能です。
例:app/View/Elements/Admin/header.ctp など

2. 通常のViewで先ほど作成したファイルを読み込ませる

読み込ませたい部分に

// 共通head
<?php echo $this->element('head'); ?>

// 共通header
<?php echo $this->element('header'); ?>

// 共通footer
<?php echo $this->element('head'); ?>

と記載すると、先ほど作成したファイルを自動で読み込んでくれます。

また、app/View/Elements/Admin/ のようにディレクトリを作成している場合は

// 共通head
<?php echo $this->element('Admin/head'); ?>

// 共通header
<?php echo $this->element('Admin/header'); ?>

// 共通footer
<?php echo $this->element('Admin/head'); ?>

と記述すればOKです。

問題点

共通部分といっても一部分だけ違っていたりすることが多いと思います。
よくあるのはhead内のtitleタグです。
titleタグの要素の内容はページによって内容が違うことが多いですよね。

こういった場合も対応可能です。

$this->element()で第二引数に連想配列で["変数名" => "値"]とすると、
パラメータを渡すことができます。

使用例:

// element側(head.ctp)

<head>
	.......
	<title><?php echo $title; ?></title>
</head>
// 通常View側(呼び出し側)

<?php echo $this->element('head', ["title" => "トップ"]); ?>

といった感じで呼び出すこともできるので大変便利ですね。

以上です。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
3
読み込み中...
3 票, 平均: 1.00 / 13
8,388
X facebook はてなブックマーク pocket
【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

長谷竜弥

新卒にて株式会社ビヨンドに入社。

Webシステム開発(Webサービス・デジタルコンテンツ・業務管理システム などのブラウザで動くサービス、システムの開発)や、ゲームAPI(アプリゲームとの通信部分のプログラム開発)を行っている。

また、Shopify のプライベート / カスタムアプリの開発も行っている。

元々は大阪オフィスに勤めていたが、2019年に横浜オフィスに転勤。
趣味は野球 / カラオケ / アニメ