В этом разделе руководства объясняется, как использовать шаблонизатор 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]);
};
}
}
Далее в шаблон подключается GridHelper
с помощью {use class='app\helpers\GridHelper'}
и вызовом статического метода
из GridHelper
определяется urlCreator
:
{use class='app\helpers\GridHelper'}
{use class='yii\grid\GridView' type='function'}
{GridView columns=[
[
'class' => 'yii\grid\ActionColumn',
'urlCreator' => GridHelper::yourGridColumnUrlCreator()
]
]}