読者です 読者をやめる 読者になる 読者になる

わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

Slim ViewsでSmartyテンプレートを呼び出す

technology php slim framework smarty composer

追記(2014-07-17)

smartyのgithubリポジトリのありか - わすれっぽいきみえ

書いた。
しかしこのgithubからリポジトリを取得する方法がまだちゃんと調査できておらず、
Smartyを使えるようにしたいならsvnを入れる方法しかまだわかってない。


去年の8月、新卒研修の一環としてPHPのマイクロフレームワークSlimを使った アプリケーションを同じチームに配属された同期と作った。

あれからもうちょっとで1年が経とうとしているが、その間にslimの開発も進んでて Smartyテンプレートの読み込みに使っていた Slim Extrasが非推奨になった。

その代わりにSlim Viewsというものが出来たので、 Slim ExtrasからSlim Viewsに置き換える方法を書いておく。

去年の時点で書いた記事

vagrant + slim framework + smartyをcomposerで構築 - わすれっぽいきみえ

に書いてあるものの続きみたいなものなので、細かいところは省略する。

環境

とりあえず以下のもの入ってることが条件。

  • git
  • svn(smartyのインストールに必要)
  • php(5.3.2以上)
  • apache(別にnginxでもよい)

他に必要なものがあったかもしれないが、それは適宜自分でインストールする。
vagrantで試しに動かしてみるなら

を使って

{
    "httpd": {
        "port": 80,
        "server-tokens": "Prod",
        "server-name": "localhost",
        "allow-override": "All",
        "server-signature": "Off"
    },
    "clock": {
        "timezone": "Asia/Tokyo"
    },
    "run_list":[
        "yum",
        "git",
        "recipe[example]",
        "recipe[example::apache]",
        "recipe[example::php]"
    ]
}

と書いたnodes/vagrant.jsonを用意してchefのレシピを流したら動くことは確認した。
ただしBerkshelfでサードパーティcookbookを管理し、 そこで落としたyumが前提のレシピになってるので、他のRedHat系以外では使えない。

ディレクトリ構成

もし上に貼ったレシピを使うのなら以下のようなディレクトリ構成にするといい。

/home/vagrant/
├── cache
├── compiled
├── composer.json
├── composer.phar
├── public_html
│ ├── .htaccess
│ └── index.php
└── templates
└── index.tpl

Slim Viewsの使い方

composer.jsonに以下のように書く。

{
  "require": {
    "slim/slim": "2.*",
    "slim/views": "0.1.*",
    "smarty/smarty": "3.*"
  }
}

php composer.phar installを実行するとvendorディレクトリが/home/vagrant直下に出来上がる。
あとはpublic_html/index.phpに以下のように書く。

<?php

require_once __DIR__ . '/../vendor/autoload.php';

$app = new \Slim\Slim(array(
  'debug' => true,
  'view' => new \Slim\Views\Smarty(),
));

$view = $app->view();
$view->setTemplatesDirectory(__DIR__ . '/../templates');
$view->parserCompileDirectory = __DIR__ . '/../compiled';
$view->parserCacheDirectory = __DIR__ . '/../cache';

$app->get('/', function() use ($app) {
  $app->render('index.tpl', array('name' => 'kimikimi714'));
})->name('home');

$app->run();

templates/index.tplには適当に以下のようなものを書いておく。

<!DOCTYPE html>
<html>
  <head>
    <title>slim sample</title>
    <meta charset="UTF-8">
  </head>
  <body>
    <h1>Hello, {$name}</h1>
  </body>
</html>

この状態でhttp://localhost/vagrant/*1にアクセスするとHello, kimikimi714と表示されるはず。表示されたらうまいこと導入できたということになる。

この記事はあくまでもSlim Viewsの導入なので、他の情報についてはググってください。

*1:ここはhttp://localhost/~vagrant/でないと表示できない人も現れるかもしれない。私のchefのレシピでは/etc/httpd/conf.d/vagrant.confというものをおくように設定していて、Alias /vagrant/ /home/vagrant/public_htmlと書き込んであるから、上のリンクでアクセスすることで見られる

広告を非表示にする