ビューセル

ビューセルはコントローラの外側で生成した HTML を挿入することができます。It simply calls the specified class and method, which must return a string of valid HTML. This method could be in any callable method, found in any class that the autoloader can locate. 唯一の制約は、クラスのコンストラクタ引数を渡せません。 これはビューの中で使われることを意図しており、コードをモジュール化するのに大いに役立つでしょう。

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

In this example, the class App\Libraries\Blog is loaded, and the method recentPosts() is run. The method must return the generated HTML as a string. The method can be either a static method or not. それぞれ動作します。

セルの引数

You can further refine the call by passing a list of parameters in the second parameter to the method. The values passed can be an array of key/value pairs, or a comma-separated string of key/value pairs:

// パラメータ配列を渡す
<?= 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') ?>