この節では、Smarty の高度な用法をいくつか示します。
Smarty の文法の制約によって、次の PHP の例のように、 無名関数を値として渡すことは出来ません。
echo GridView::widget([
'columns' => [
[
'class' => 'yii\grid\DataColumn',
'value' => function ($data) {
return $data->name;
},
],
],
]);
しかし、目的を達する方法はあります。まず、値をフォーマットするロジックを定義するスタティックな関数を持つ、ヘルパ・クラスを作ります。
<?php
namespace app\helpers;
class GridHelper
{
public static function yourGridColumnTitleValue($data)
{
return strtoupper($data->title);
}
}
そして、そのスタティックなコールバックを配列にして GridView
のカラムの値として渡します。
{use class='yii\grid\GridView' type='function'}
{GridView columns=[
[
'class' => 'yii\grid\DataColumn',
'value' => ['app\helpers\GridHelper', 'yourGridColumnTitleValue']
]
]}
ここでも、次の例のように、カスタマイズした無名関数を渡すことは不可能です。
echo GridView::widget([
'columns' => [
[
'class' => 'yii\grid\ActionColumn',
'urlCreator' => function($action, $model, $key, $index) {
return Url::to(['custom/url', 'key' => $key]);
},
],
],
]);
Smarty を使う場合は、クロージャを返すスタティックな関数を持つ、ヘルパ・クラスを作らなければなりません。
<?php
namespace app\helpers;
class GridHelper
{
public static function yourGridColumnUrlCreator()
{
return function($action, $model, $key, $index) {
return Url::to(['custom/url', 'key' => $key]);
};
}
}
そして、{use class='app\helpers\GridHelper'}
によって GridHelper
をロードし、
GridHelper
に属するスタティックな関数を呼ぶように urlCreator
を設定します。
{use class='app\helpers\GridHelper'}
{use class='yii\grid\GridView' type='function'}
{GridView columns=[
[
'class' => 'yii\grid\ActionColumn',
'urlCreator' => GridHelper::yourGridColumnUrlCreator()
]
]}