#CodeIgniter4でもSmartyを使いたい
前の記事でも少し述べましたが、CodeIgniter4(以下CI4)のViewにはテンプレートエンジンと呼べるようなシロモノは含まれていません。
殆どの場合は生のPHPでHTMLのページなどを組み上げることになるのですが、実際の制作の現場だとロジック(PHP)とデザイン(HTML)のコーディングを分業している制作会社も多数存在しており、ここをSmartyやTwigなどのテンプレートエンジンで埋めているパターンが多いのではないでしょうか?
そこで、本記事ではCI4でSmartyを導入してViewのレンダラとして導入する方法を説明します。
#Smarty for CodeIgniter4を導入する
CI4上でSmartyを利用するには拙作、Smarty for CodeIgniter4を使うと手っ取り早いです。
CI4への組み込みは最低限の内容にとどめているので動作は軽いと思います。
例は「CodeIgniter4をインストール (Composer利用)」での導入を終えた流れでインストールをした場合です。
$ cd /home/ci4test
$ composer require sarah-systems/ci4smarty
以下は、概ねREADME.md
からの抜粋です。
使い方
デフォルトでは、Smarty関連のパスは自体は次のような設定で動作するようになっています。
種類 | パス |
---|---|
テンプレート | app/Views |
コンパイル | writable/smarty/templates_c |
キャッシュ | writable/smarty/cache |
コンフィグ | writable/smarty/config |
writable
が正しく書き込み可能な場合、下の3つのディレクトリは自動的に生成されます。
もしエラーが起きた場合は、これらのディレクトリを作って適切なパーミッションを与えることで動作します。
もしこのパスを変更したい場合は.env
ファイルに次のパラメータをセットすることで、任意のパスに変更可能です。
CI4Smarty.TemplateDir = /path/to/TemplateDir
CI4Smarty.CompileDir = /path/to/CompileDir
CI4Smarty.CacheDir = /path/to/CacheDir
CI4Smarty.ConfigDir = /path/to/ConfigDir
これ以外にも.env
では、SmartyのDebugフラグのOn/Offとデフォルトのテンプレート拡張子を設定できます。
CI4Smarty.Debug = 1 または 0
CI4Smarty.DefaultTemplateExtension = .tpl
Smartyでview()を利用したい。
CI4のview関数をSmarty用にCI4Smartyというnamespaceで定義しています。
利用する際はapp
ディレクトリ直下のCommon.php
に次を追記してください。
require_once ROOTPATH . "vendor/sarah-systems/ci4smarty/src/Common.php";
使用法はCI4のview関数と同じですが、関数の利用時には名前空間を指定するか、事前にエイリアスを張ってください。
\CI4Smarty\view('template.tpl');
または
use function CI4Smarty\view as view;
view('template.tpl');
拡張子.tpl
(CI4Smarty.DefaultTemplateExtension
で設定されたものです。無指定の場合は.tpl
)は省略可能です。
view('template');
view関数の第2パラメータはSmarty変数$CI
にアサインされます。
$data = [ 'apple' , 'banana' , 'lemon' ];
view('template',$data);
Smartyのtemplate上では
{$CI.0} <-- appleが表示されます。
第3引数の$optionsは無視されます。
Serviceでの利用も可能です
CI4のServiceが利用可能です。
use CI4Smarty\Config\Services;
$time = date('Y-m-d H:i:s');
$smarty = Services::smarty();
$smarty->assign('time',$time);
$smarty->display('template.tpl');
次回はCI4上でTwigを使う方法を解説します。