CodeIgniter4 視圖布局

2020-08-13 16:45 更新

CodeIgniter 提供了一個(gè)簡單但非常靈活的布局系統(tǒng),使你可以輕松地在整個(gè) web 應(yīng)用程序中使用一個(gè)或多個(gè)基本頁面布局。 布局支持在任何渲染視圖中插入內(nèi)容節(jié)。你可以通過創(chuàng)建不同的布局來支持一欄、兩欄或博客存檔頁面等。布局不會(huì)直接被渲染, 但可以通過渲染一個(gè)視圖(View),而該視圖可以指定要擴(kuò)展的布局(Layout)來實(shí)現(xiàn)(渲染布局)。

創(chuàng)建布局

布局和其他視圖一樣。它們唯一的區(qū)別是它們的用途。布局就是使用 renderSection() 方法的視圖文件。這個(gè)方法會(huì)充當(dāng)內(nèi)容的占位符。

<!doctype html>
<html>
<head>
    <title>My Layout</title>
</head>
<body>
    <?= $this->renderSection('content') ?>
</body>
</html>

renderSection() 方法只有一個(gè)參數(shù),那就是節(jié)的名稱,這樣所有子視圖就都可以知道節(jié)的名稱。

在視圖中使用布局

無論何時(shí)需要把視圖插入到布局中時(shí),都必須在文件開頭使用 extend() 方法:

<?= $this->extend('default') ?>

extend() 方法采用你所希望使用的視圖文件的名稱。由于它們也是視圖,因此它們的位置就像視圖一樣。默認(rèn)情況下, 會(huì)在應(yīng)用程序的 View 目錄中查找它們,但還會(huì)掃描其他 PSR-4 定義的命名空間。你還可以加上一個(gè)命名空間以在特定名稱空間的 View 目錄中定位視圖:

<?= $this->extend('Blog\Views\default') ?>

拓展布局所有內(nèi)容時(shí),必須包含 section($name)endSection() 方法的調(diào)用。這些調(diào)用之間的任何內(nèi)容都將插入到與節(jié)名稱匹配的 renderSection($name) 調(diào)用所在的布局中::

<?= $this->extend('default') ?>


<?= $this->section('content') ?>
    <h1>Hello World!</h1>
<?= $this->endSection() ?>

endSection() 不需要節(jié)的名稱,它會(huì)自動(dòng)結(jié)束需要結(jié)束的節(jié)。

渲染視圖

渲染視圖及其布局的方法與在控制器中顯示的任何其他視圖的方法完全相同:

public function index()
{
    echo view('some_view');
}

渲染器足夠強(qiáng)大,它可以檢測視圖是需要單獨(dú)渲染還是需要布局。

引用局部視圖

局部視圖是不擴(kuò)展任何布局的視圖文件。它們通常是可以在視圖之間重復(fù)使用的內(nèi)容。 使用視圖布局時(shí),必須使用 $this->include() 來引用。

<?= $this->extend('default') ?>


<?= $this->section('content') ?>
    <h1>Hello World!</h1>


    <?= $this->include('sidebar') ?>
<?= $this->endSection() ?>

調(diào)用 include() 方法時(shí),可以將渲染普通視圖時(shí)可以使用的所有選項(xiàng)都傳遞給它,包括緩存指令等。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號