ビューレンダラー
ビューレンダラーの使用
view()
関数は、`renderer` サービスのインスタンスを取得し、データを設定して、ビューをレンダリングする便利な関数です。多くの場合、これはまさにあなたが望むものですが、より直接的に操作したい場合があります。その場合は、View サービスに直接アクセスできます。
$view = \Config\Services::renderer();
あるいは、`View` クラスをデフォルトのレンダラーとして使用していない場合は、直接インスタンス化できます。
$view = new \CodeIgniter\View\View();
重要
サービスはコントローラー内でのみ作成する必要があります。ライブラリから View クラスにアクセスする必要がある場合は、ライブラリのコンストラクターで依存関係として設定する必要があります。
その後、提供される 3 つの標準メソッド、render()
、setVar()
、setData()
を使用できます。
機能
`View` クラスは、ビューパラメータを PHP 変数に展開した後、アプリケーションのビューパスに保存されている従来の HTML/PHP スクリプトを処理します。これらの変数はスクリプト内でアクセスできます。つまり、ビューパラメータ名は有効な PHP 変数名である必要があります。
View クラスは内部で連想配列を使用して、`render()` を呼び出すまでビューパラメータを蓄積します。これは、パラメータ(または変数)名が重複しないようにする必要があることを意味します。重複すると、後で設定された変数が以前の変数を上書きします。
これは、スクリプト内の異なるコンテキストでパラメータ値をエスケープすることにも影響します。エスケープされた各値に一意のパラメータ名を付ける必要があります。
値が配列であるパラメータには特別な意味はありません。PHP コードで配列を適切に処理するのはあなた次第です。
ビューパラメータの設定
setVar()
メソッドは、ビューパラメータを設定します。
$view->setVar('name', 'Joe', 'html');
setData()
メソッドは、複数のビューパラメータを一度に設定します。
$view->setData(['name' => 'George', 'position' => 'Boss']);
メソッドチェーン
`setVar()` メソッドと `setData()` メソッドはチェーン可能です。つまり、複数の異なる呼び出しをチェーンで組み合わせることができます。
$view->setVar('one', $one)
->setVar('two', $two)
->render('myView');
データのエスケープ
`setVar()` 関数と `setData()` 関数にデータを渡すときに、クロスサイトスクリプティング攻撃から保護するためにデータをエスケープするオプションがあります。どちらのメソッドでも、最後のパラメータとして、データをエスケープするための目的のコンテキストを渡すことができます。コンテキストの説明については以下を参照してください。
データをエスケープしたくない場合は、各関数の最後のパラメータとして `null` または `'raw'` を渡すことができます。
$view->setVar('one', $one, 'raw');
データをエスケープしないことを選択した場合、またはオブジェクトインスタンスを渡している場合は、esc()
関数を使用してビュー内で手動でデータをエスケープできます。最初のパラメータはエスケープする文字列です。 2 番目のパラメータは、データをエスケープするためのコンテキストです(以下を参照)。
<?= esc($object->getStat()) ?>
エスケープコンテキスト
デフォルトでは、`esc()` 関数、ひいては `setVar()` 関数と `setData()` 関数は、エスケープするデータが標準 HTML 内で使用されることを想定しています。ただし、データが Javascript、CSS、または href 属性で使用されることを意図している場合は、効果的なエスケープルールが異なります。コンテキストの名前を 2 番目のパラメータとして渡すことができます。有効なコンテキストは、`'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` - キャッシュされたビューの結果を保存/取得するために使用される ID。デフォルトは viewpath です。 `renderString()` では無視されます。
`saveData` - 後続の呼び出しのためにビューデータパラメータを保持する必要がある場合は true です。
注
インターフェースで定義されている `saveData()` はブール値である必要がありますが、実装クラス(以下の `View` など)はこれを拡張して `null` 値を含めることができます。
クラスリファレンス
- class CodeIgniter\View\View
- render($view[, $options[, $saveData = false]])
- パラメータ:
**$view** (
string
) – ビューソースのファイル名**$options** (
array
) – キー/値ペアの配列としてのオプション$saveData (
boolean|null
) – true の場合、他の呼び出しで使用するためにデータを保存します。false の場合、ビューのレンダリング後にデータを消去します。null の場合、設定値を使用します。
- 戻り値:
選択されたビューのレンダリングされたテキスト
- 戻り値の型:
string
ファイル名と既に設定されているデータに基づいて出力を構築します
echo $view->render('myview');
- renderString($view[, $options[, $saveData = false]])
- パラメータ:
$view (
string
) – レンダリングするビューの内容。例えば、データベースから取得したコンテンツ**$options** (
array
) – キー/値ペアの配列としてのオプション$saveData (
boolean|null
) – true の場合、他の呼び出しで使用するためにデータを保存します。false の場合、ビューのレンダリング後にデータを消去します。null の場合、設定値を使用します。
- 戻り値:
選択されたビューのレンダリングされたテキスト
- 戻り値の型:
string
ビューのフラグメントと既に設定されているデータに基づいて出力を構築します
echo $view->renderString('<div>My Sharona</div>');
警告
これは、データベースに保存されている可能性のあるコンテンツを表示するために使用できますが、潜在的なセキュリティの脆弱性であることに注意する必要があります。このようなデータは**必ず**検証し、適切にエスケープする必要があります。
- setData([$data[, $context = null]])
- パラメータ:
$data (
array
) – キーと値のペアを持つビューデータ文字列の配列$context (
string
) – データエスケープに使用するコンテキスト。
- 戻り値:
メソッドチェーンのためのレンダラー
- 戻り値の型:
CodeIgniter\View\RendererInterface.
複数のビューデータを一度に設定します
$view->setData(['name' => 'George', 'position' => 'Boss']);
サポートされているエスケープコンテキスト:
html
,css
,js
,url
,attr
またはraw
。'raw'
の場合、エスケープは行われません。呼び出しごとに、ビューがレンダリングされるまで、オブジェクトが蓄積するデータの配列に追加されます。
- setVar($name[, $value = null[, $context = null]])
- パラメータ:
$name (
string
) – ビューデータ変数の名前$value (
mixed
) – このビューデータの値$context (
string
) – データエスケープに使用するコンテキスト。
- 戻り値:
メソッドチェーンのためのレンダラー
- 戻り値の型:
CodeIgniter\View\RendererInterface.
ビューデータを1つ設定します
$view->setVar('name', 'Joe', 'html');
サポートされているエスケープコンテキスト:
html
,css
,js
,url
,attr
またはraw
。'raw'
の場合、エスケープは行われません。このオブジェクトに既に使用されているビューデータ変数を使用すると、新しい値は既存の値を置き換えます。