CakePHPのビューをSmartyに置き換える方法

こんにちは!ぐちです。

CakePHPのビュー

標準のCakePHPのビューだとファイル内に<?php ?>というPHPの制御文を記述する構文が頻発して非常に見づらくなります。PHPの構文をそのまま書けるので柔軟性は高いのですがロジックとコンテンツを切り分ける線引きが曖昧になりますよね。ビュー内で何でも処理が書けちゃいますので。そこでPHPにはロジックとコンテンツを切り分けるためにテンプレートエンジンと呼ばれるフレームワークが公開されています。

Smarty

PHPの有名なテンプレートエンジンにSmartyというものがあります。{}を用いてSmartyの構文をビュー(Smartyではテンプレートといいます)ファイルに記述していきます。非推奨ではありますがCakePHPの標準のようにPHP構文を書いていくことも可能ですがSmartyの構文で事足りるのでおそらく不要です。

そこで便利なフレームワークであるCakePHPと便利なテンプレートエンジンを組み合わせて使おうではありませんか!ということで導入方法をご紹介します。Smarty自体のご紹介は改めてさせて頂きます。

Smartyをダウンロード

まずはSmartyの公式サイトからZIPをダウンロードします。その中にあるlibsディレクトリをCakePHPのapp/Vendor/にコピーしてsmartyという名前に変更します。

Smarty用のビューファイルを作成

GithubからSmartyView.phpを取得してapp/View/に配置します。

AppControllerを修正

app/Controller/AppController.phpに下記の通り$viewClassを定義します。

<?php
class AppController extends Controller {
    public $viewClass = 'Smarty';
}

Smarty用のキャッシュディレクトリを作成

下記のコマンドを実行してSmarty用のキャッシュディレクトリを作成します。

$ mkdir -p app/tmp/smarty/cache/
$ mkdir -p app/tmp/smarty/compile/
$ chmod 0777 app/tmp/smarty/cache/
$ chmod 0777 app/tmp/smarty/compile/

Layoutファイルを変更する

app/View/Layouts/default.ctpdefault.tplという名前に変更しSmarty構文でコンテンツを表示できるよう下記の通り変更する。

<html>
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width,initial-scale=1">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta http-equiv="Cache-Control" content="no-cache">
        <meta http-equiv="Content-Script-Type" content="text/javascript">
        <meta http-equiv="Content-Style-Type" content="text/css">
        <meta name="description" content="">
        <meta name="keywords" content="" />
        <title></title>
    </head>
    <body>
        {$content_for_layout}
    </body>
</html>

CakePHP × Smarty

上記の手順でCakePHPにてSmartyが使えるようになります。(たぶん・・・)

これでロジックとコンテンツを分けつつCakePHPのパワフル軽量なコーディングでバリバリおもしろいWebサービスを作れますね!