ビューセル¶
ビューセルはコントローラの外側で生成した 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') ?>