W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
view()
方法是一種便捷功能,可以獲取 renderer
服務實例,然后可以設置數(shù)據(jù)并顯示視圖。 這種方式是我們常用的方式,但有時候我們需要一種更為直接的使用方式;在這種情況下你可以直接以視圖服務的形式調用它:
$view = \Config\Services::renderer();
如果不使用 View
類作為默認渲染器,則可以直接實例化它:
$view = new \CodeIgniter\View\View();
重要
你應該只在控制器內創(chuàng)建、使用服務。如果你想在其他類(Library)中使用,則應在類的構造函數(shù)中將其設置為依賴項。
然后,您可以使用它提供的三種標準方法中的任何一種: render(viewpath, options, save), setVar(name, value, context) 和 setData(data, context).
View
類將視圖的參數(shù)提取到可在腳本內部訪問的PHP變量后,處理存儲在應用程序視圖路徑中的標準 HTML/PHP 腳本。 這意味著視圖中的參數(shù)名稱必須是合法的 PHP 變量名。
View
類在內部使用一個關聯(lián)數(shù)組,以保存視圖參數(shù),直到調用 render()
方法為止。這意味著視圖參數(shù)(或變量)名稱必須是 唯一的,否則后面變量的值將覆蓋前面的變量。
同時,這還會影響腳本中不同上下文的參數(shù)值,你將必須為每個值賦予唯一的參數(shù)名稱。
數(shù)組類型的值沒有任何特殊含義,可以根據(jù)自己的 PHP 代碼處理數(shù)組。
setVar() 和 setData() 方法支持鏈式調用,允許將多個不同的調用組合到一個方法鏈中使用:
$view->setVar('one', $one)
->setVar('two', $two)
->render('myView');
當你將數(shù)據(jù)傳遞給 setVar()
和 setData()
方法時,可以選擇轉義數(shù)據(jù)以防止跨站點腳本攻擊。作為這兩種方法中的最后一個參數(shù),你 可以傳遞所需的上下文,以選擇是否對數(shù)據(jù)進行轉義。
如果你不想對數(shù)據(jù)進行轉義,你可以向每個方法的最后一個參數(shù)傳遞 null 或 raw,這樣將不會對數(shù)據(jù)進行轉義:
$view->setVar('one', $one, 'raw');
如果選擇不轉義數(shù)據(jù),或者要傳遞對象實例,則可以使用 esc()
輔助方法在視圖中手動轉義數(shù)據(jù)。第一個參數(shù)是要轉義的字符串,第二個參數(shù)是 用于轉義數(shù)據(jù)的上下文(請參見下文):
<?= \esc($object->getStat()) ?>
注解
譯者注:框架內部使用\Zend\Escaper\Escaper
類中以 escape 開頭的相關方法對數(shù)據(jù)進行的轉義處理。
默認情況下,esc()
方法認為要轉義的數(shù)據(jù)會在 HTML 中使用。如果數(shù)據(jù)打算用于 Javascript、CSS 或 href 屬性時,需要不同的轉義規(guī)則才 能生效。你可以傳入轉義類型名稱作為第二個參數(shù),選擇合適的規(guī)則。規(guī)則支持 ‘html’, ‘js’, ‘css’, ‘url’ 和 ‘attr’:
<a href="<?= esc($url, 'url') ?>" data-foo="<?= esc($bar, 'attr') ?>">Some Link</a>
<script>
var siteName = '<?= esc($siteName, 'js') ?>';
</script>
<style>
body {
background-color: <?= esc('bgColor', 'css') ?>
}
</style>
可以將多個選項信息傳遞給 render()
或 renderString()
方法:
cache
- 緩存視圖結果的時間(以秒為時間單位), renderString() 方法中會忽略cache_name
- 保存緩存視圖結果的文件名,默認是 viewpath, renderString() 方法中會忽略saveData
- 如果要保留視圖的參數(shù),并在后續(xù)調用中使用,應設置為 trueCodeIgniter\View\View
render
($view[, $options[, $saveData=false]]])
參數(shù): | $view (string) – 源視圖文件的文件名 |
---|---|
$options (array) – 以鍵值對傳遞的選項數(shù)組 | |
$saveData (boolean) – 如果該值為 true , 該方法會保留該數(shù)據(jù)并為其他調用使用;反之就會在渲染視圖后清除該數(shù)據(jù) | |
返回: | 指定視圖文件所渲染的文字內容 |
返回類型: | string |
根據(jù)傳入的文件名和預先設置的數(shù)據(jù)來渲染輸出:
echo $view->render('myview');
renderString
($view[, $options[, $saveData=false]]])
參數(shù): | $view (string) – 需要渲染的視圖的內容,例如從數(shù)據(jù)庫里返回的內容等 |
---|---|
$options (array) – 以鍵值對傳遞的選項數(shù)組 | |
$saveData (boolean) – 如果該值為 true , 該方法會保留該數(shù)據(jù)并為其他調用使用;反之就會在渲染視圖后清除該數(shù)據(jù) | |
返回: | 指定視圖文件所渲染的文字內容 |
返回類型: | string |
根據(jù)給定的視圖分塊和預先設置的數(shù)據(jù)來渲染輸出:
echo $view->renderString('<div>My Sharona</div>');
該方法可以用于輸出一些例如數(shù)據(jù)庫中存儲的內容。但是你需要意識到這一操作可能是有安全風險的,并且必須對這些數(shù)據(jù)進行驗證以及盡可能進行轉義!
setData
([$data[, $context=null]])
參數(shù): | $data (array) – 以鍵值對傳遞的視圖數(shù)據(jù)數(shù)組 |
---|---|
$context (string) – 使用數(shù)據(jù)轉義的上下文 | |
返回: | 用于方法鏈式調用的渲染器 |
返回類型: | CodeIgniter\View\RendererInterface. |
同時設置多組視圖數(shù)據(jù):
$view->setData(['name'=>'George', 'position'=>'Boss']);
支持以下的上下文: html, css, js, url, or attr or raw, 如果是 ‘raw’ 的話,就不進行轉義
每個調用都會為對象附加一個屬性數(shù)據(jù),直到視圖被渲染
setVar
($name[, $value=null[, $context=null]])
參數(shù): | $name (string) – 視圖數(shù)據(jù)變量的變量名 |
---|---|
$value (mixed) – 該變量的變量值 | |
$context (string) – 使用數(shù)據(jù)轉義的上下文 | |
返回: | 用于方法鏈式調用的渲染器 |
返回類型: | CodeIgniter\View\RendererInterface. |
設置單個數(shù)據(jù)變量:
$view->setVar('name','Joe','html');
支持以下的上下文: html, css, js, url, or attr or raw, 如果是 ‘raw’ 的話,就不進行轉義
如果你想要使用對該對象已使用過的視圖數(shù)據(jù)變量,新的值就會取代老的值。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: