CodeIgniter4 子視圖

2020-08-13 16:34 更新

子視圖允許你插入在控制器以外生成的 HTML 片段,但它只能調(diào)用指定類的方法,且該方法只能返回有效的 HTML 字符串內(nèi)容。這個(gè)可調(diào)用方法可以是在 項(xiàng)目中自動(dòng)加載器可以定位到的任何可訪問類的任何方法,唯一的限制是該類的構(gòu)造方法不可有必須傳入的參數(shù)。使用這個(gè)功能后,對模塊化代碼有很好的幫助。

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

在這個(gè)示例中,會自動(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ù)支持鍵/值對的數(shù)組或鍵/值對的字符串(已逗號分隔):

// 數(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') ?>
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號