前回の記事、CodeIgniter4のModelの基礎の続きです。
#CodeIgniter4のViewってどんなもの?
CIのviewはphpファイルがそのままテンプレートエンジン的な振る舞いをしています。ある意味潔い実装です。
一応ビューパーサクラスが用意してあり、変数へのアサインや、配列を用いた簡単なループも出来ますが、あまり大した機能は持っていません。
その代わりといってはなんですが、比較的容易にSmartyやTwigといった外部のテンプレートエンジンを組み込んで使うことが出来ます。
これらのテンプレートエンジンが簡単に導入できるということは、viewを担当する人にCIのパーサの学習を強いる必要が無いことから結構なメリットになるものと思われます。
この記事を書いている当人も、CIの内蔵のテンプレートパーサを利用したviewの実装というものは、全くというほどしたことがないので、本記事でもここは最低限の説明にとどめておきます。
#viewのファイルの出力の実態
まずviewとして設定されたファイルはどこにあり、どのようにコントローラから指定されて出力されるか?
CIのデフォルトインストールのトップページではapp/Views/welcome_message.php
というViewのファイルをapp/Controllers/Home.php
というコントローラのファイル内のindex()
というメソッド上でコールされているview('welcome_message')
というCI上のグローバル関数を叩いてその値を返却してあげることで表示を実施します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome to CodeIgniter 4!</title>
ーーー以下略ーーー
<?php namespace App\Controllers;
class Home extends BaseController
{
public function index()
{
return view('welcome_message');
}
//--------------------------------------------------------------------
}
なお、view()
の戻り値はレンダリングされたHTMLそのものなので、return
で返す前に、そのままメソッド内でecho
することも可能です。
ここの引数の'welcome_message'
はズバリそのまま、app/Views/welcome_message.php
を指しており、引数に拡張子が省略されると.php
が補われます。要は、この関数の実体はapp/Views/welcome_message.php
の中身を返却せよという動作です。
(ちなみにview()
のデフォルトパスapp/Views/
はapp/Config/Paths.php
にて定義されている$viewDirectory
が反映されています。)
#view()を使って表示する。
前の記事ではreturn
に直接文字列を放り込んで、画面出力を行っていましたが、代わりにapp/Views/result.php
を作ってやり、そこでコントローラで受け取った戻り値などをview()に放り込んあげればその内容をビュー側でハンドリングすることが可能です。
簡単な例として「CodeIgniter4でDB接続まで」の記事で記したDBの接続テストの結果をビューで表示するようにしてみます。
<?php namespace App\Controllers;
use Config\Database;
class Home extends BaseController
{
public function index()
{
return view('welcome_message');
}
//--------------------------------------------------------------------
public function connectionTest()
{
$db = Database::connect();
$data['listTables'] = "このDBのテーブル=" . implode( ',' , $db->listTables() );
return view('result', $data);
}
}
<html lang="ja">
<body>
<p><?php echo $listTables; ?></p>
</body>
</html>
このように、view()の第2引数(これはArrayで有ることが必須です)が、キーを変数名としたものに変換されてView上の変数として定義されますのでアクセスの際は$listTables
のような形で参照します。
詳しくはCIのマニュアルのViewsのページを参照してください。
CIのテンプレートエンジンを利用した制御構造や変数等のアサインなどの仕方の記載があります。
次回はCIにViewのテンプレートエンジンとしてSmartyやTwigを組み込んで利用する方法を説明します。