Help us understand the problem. What is going on with this article?

CodeIgniter4でSmartyを使う(Composer利用)

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利用)」での導入を終えた流れでインストールをした場合です。

composerによるSmarty for CodeIgniter4の導入
$ 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ファイルに次のパラメータをセットすることで、任意のパスに変更可能です。

.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とデフォルトのテンプレート拡張子を設定できます。

.env
CI4Smarty.Debug = 1 または 0
CI4Smarty.DefaultTemplateExtension = .tpl

Smartyでview()を利用したい。

CI4のview関数をSmarty用にCI4Smartyというnamespaceで定義しています。

利用する際はappディレクトリ直下のCommon.phpに次を追記してください。

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');

拡張子.tplCI4Smarty.DefaultTemplateExtensionで設定されたものです。無指定の場合は.tpl)は省略可能です。

view('template');

view関数の第2パラメータはSmarty変数$CIにアサインされます。

$data = [ 'apple' , 'banana' , 'lemon' ];
view('template',$data);

Smartyのtemplate上では
smarty
{$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を使う方法を解説します。

kohenji01
主に中規模〜極小規模のBtoB/BtoCのWebシステムを作っています。 新規開発案件も募集中です。
http://www.sarah-sys.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away