子視圖?
子視圖允許你插入在控制器以外生成的 HTML 片段,但它只能調(diào)用指定類的方法,且該方法只能返回有效的 HTML 字符串內(nèi)容。這個(gè)可調(diào)用方法可以是在 項(xiàng)目中自動(dòng)加載器可以定位到的任何可訪問類的任何方法,唯一的限制是該類的構(gòu)造方法不可有必須傳入的參數(shù)。使用這個(gè)功能后,對(duì)模塊化代碼有很好的幫助。
<?= view_cell('\App\Libraries\Blog::recentPosts') ?>
在這個(gè)示例中,會(huì)自動(dòng)運(yùn)行 App\Libraries\Blog
類的 recentPosts()
方法,該方法必須返回有效的 HTML 字符串。該方法可以是
靜態(tài)方法,也可以是非靜態(tài)方法。
子視圖參數(shù)?
可以通過 view_cell
方法的第二個(gè)參數(shù)向方法進(jìn)行傳值來進(jìn)一步優(yōu)化調(diào)用方式。參數(shù)支持鍵/值對(duì)的數(shù)組或鍵/值對(duì)的字符串(已逗號(hào)分隔):
// 數(shù)組形式的參數(shù)
<?= view_cell('\App\Libraries\Blog::recentPosts', ['category' => 'codeigniter', 'limit' => 5]) ?>
// 字符串形式的參數(shù)
<?= 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]);
}
此外,可以在方法中使用與參數(shù)變量匹配的參數(shù)名稱,以提高可讀性。當(dāng)以這種方式使用它時(shí),必須始終在視圖調(diào)用方法中指定所有參數(shù):
<?= 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]);
}
子視圖緩存?
您可以通過傳遞緩存數(shù)據(jù)的秒數(shù)作為第三個(gè)參數(shù)來緩存子視圖的調(diào)用結(jié)果,默認(rèn)將使用當(dāng)前配置的緩存引擎。
// 視圖將緩存 5 分鐘
<?= view_cell('\App\Libraries\Blog::recentPosts', 'limit=5', 300) ?>
當(dāng)然,你也可以自定義緩存視圖的文件名已替換默認(rèn)的緩存文件名,通過第 4 個(gè)參數(shù)來自定義:
// 視圖將緩存 5 分鐘,將緩存文件重新命名為 newcacheid
<?= view_cell('\App\Libraries\Blog::recentPosts', 'limit=5', 300, 'newcacheid') ?>