ビューセル

ビューセルはコントローラの外側で生成した HTML を挿入することができます。シンプルに特定のクラスとメソッドを呼び出すもので、正しい HTML を返さなければなりません。このメソッドは呼び出し可能なメソッドであるか、オートローダが拾えるクラスのものであるべきものです。唯一の制約は、クラスのコンストラクタ引数を渡せません。 これはビューの中で使われることを意図しており、コードをモジュール化するのに大いに役立つでしょう。

<?= view_cell('\App\Libraries\Blog::recentPosts') ?>

この例では、クラス App\Libraries\Blog が読み込まれ、メソッド recentPosts() が実行されます。このメソッドは生成した HTML を文字列として返さなければなりません。このメソッドは静的メソッドかそうでないか、どちらでも良いです。それぞれ動作します。

セルの引数

さらに、パラメータリストの文字列を第2引数に渡してセルを改良することもできます。メソッドに渡すのは連想配列かコンマで区切られたキー・値ペアの文字列です:

// パラメータ配列を渡す
<?= view_cell('\App\Libraries\Blog::recentPosts', ['category' => 'codeigniter', 'limit' => 5]) ?>

// パラメータ文字列を渡す
<?= view_cell('\App\Libraries\Blog::recentPosts', 'category=codeigniter, limit=5') ?>

public function recentPosts(array $params=[])
{
    $posts = $this->blogModel->where('category', $params['category'])
                             ->orderBy('published_on', 'desc')
                             ->limit($params['limit'])
                             ->get();

    return view('recentPosts', ['posts' => $posts]);
}

加えて、パラメータ名をメソッドの引数に一致させると、読みやすくなります。 この方法を使う場合、ビューセルを呼び出す際に常にすべてのパラメータを指定しなければなりません:

<?= view_cell('\App\Libraries\Blog::recentPosts', 'category=codeigniter, limit=5') ?>

public function recentPosts(int $limit, string $category)
{
    $posts = $this->blogModel->where('category', $category)
                             ->orderBy('published_on', 'desc')
                             ->limit($limit)
                             ->get();

    return view('recentPosts', ['posts' => $posts]);
}

セルのキャッシュ

ビューセルの結果はキャッシュできます。第3引数に秒数を指定します。これはキャッシュエンジンのその時点の設定を使用します。

// ビューを5分キャッシュします
<?= view_cell('\App\Libraries\Blog::recentPosts', 'limit=5', 300) ?>

自動生成するキャッシュ名の代わりに独自の名前を指定できます。第4引数に渡します:

// ビューを5分キャッシュします
<?= view_cell('\App\Libraries\Blog::recentPosts', 'limit=5', 300, 'newcacheid') ?>