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

CodeIgniter4のViewの基礎

前回の記事、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上のグローバル関数を叩いてその値を返却してあげることで表示を実施します。

app/Views/welcome_message.php
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome to CodeIgniter 4!</title>

ーーー以下略ーーー

app/Controllers/Home.php
<?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の接続テストの結果をビューで表示するようにしてみます。

app/Controllers/Home.php
<?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);
    }
}
app/Views/Result.php
<html lang="ja">
<body>
<p><?php echo $listTables; ?></p>
</body>
</html>

このように、view()の第2引数(これはArrayで有ることが必須です)が、キーを変数名としたものに変換されてView上の変数として定義されますのでアクセスの際は$listTablesのような形で参照します。

詳しくはCIのマニュアルのViewsのページを参照してください。
CIのテンプレートエンジンを利用した制御構造や変数等のアサインなどの仕方の記載があります。

次回はCIにViewのテンプレートエンジンとしてSmartyや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