Yii2 格式化程序 - 创建自定义格式
Yii2 formatter - create custom format
我想为 DetailView 和 GridView 创建我自己的格式选项。我现在正在使用可用的格式化程序选项,例如 datetime:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'current_date:datetime'
]
]?>
我想要这样的格式化程序:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'current_date:datetime',
'colorId:color'
]
]?>
color 会将 colorId(即 int - 颜色标识符)转换为颜色名称。我知道我可以在模型中有一个函数/虚拟属性,但我想在任何地方使用它,而不仅仅是在那个特定的模型上。我一直在搜索,但只发现我需要 specific formatter.
您可以扩展 Formatter class 并将 'color' 作为一种新的格式来处理。像这样...
class MyFormatter extends \yii\i18n\Formatter
{
public function asColor($value)
{
// translate your int value to something else...
switch ($value) {
case 0:
return 'White';
case 1:
return 'Black';
default:
return 'Unknown color';
}
}
}
然后通过更改您的配置切换到使用这个新的格式化程序...
'components' => [
'formatter' => [
'class' => '\my\namespace\MyFormatter',
// other settings for formatter
'dateFormat' => 'yyyy-MM-dd',
],
],
现在您应该可以按照您的要求在 gridview/datacolumn 中使用颜色格式了:
'colorId:color'
...或者通常通过调用应用程序的格式化程序组件:
echo Yii::$app->formatter->asColor(1); // 'Black'
请注意,此代码未经测试,可能包含错误。
我想为 DetailView 和 GridView 创建我自己的格式选项。我现在正在使用可用的格式化程序选项,例如 datetime:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'current_date:datetime'
]
]?>
我想要这样的格式化程序:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'current_date:datetime',
'colorId:color'
]
]?>
color 会将 colorId(即 int - 颜色标识符)转换为颜色名称。我知道我可以在模型中有一个函数/虚拟属性,但我想在任何地方使用它,而不仅仅是在那个特定的模型上。我一直在搜索,但只发现我需要 specific formatter.
您可以扩展 Formatter class 并将 'color' 作为一种新的格式来处理。像这样...
class MyFormatter extends \yii\i18n\Formatter
{
public function asColor($value)
{
// translate your int value to something else...
switch ($value) {
case 0:
return 'White';
case 1:
return 'Black';
default:
return 'Unknown color';
}
}
}
然后通过更改您的配置切换到使用这个新的格式化程序...
'components' => [
'formatter' => [
'class' => '\my\namespace\MyFormatter',
// other settings for formatter
'dateFormat' => 'yyyy-MM-dd',
],
],
现在您应该可以按照您的要求在 gridview/datacolumn 中使用颜色格式了:
'colorId:color'
...或者通常通过调用应用程序的格式化程序组件:
echo Yii::$app->formatter->asColor(1); // 'Black'
请注意,此代码未经测试,可能包含错误。