Playという名前のテーブルがあり、Yii2詳細ビューウィジェットに各レコードの詳細を表示しています。そのテーブルにtinyint型の属性recurring
があり、0または1にすることができます。しかし、それを数値として表示したくないので、代わりにyes
を表示したいと思います。または、値(0または1)に基づくno
。
詳細ビューウィジェットの関数でこれを変更しようとしていますが、エラーが発生します:Object of class Closure could not be converted to string
私の詳細ビューコード:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'name',
'max_people_count',
'type',
[
'attribute' => 'recurring',
'format'=>'raw',
'value'=> function ($model) {
if($model->recurring == 1)
{
return 'yes';
}
else {
return 'no';
}
},
],
'day',
'time',
...
どんな助けでもいただければ幸いです!
試してみてください
'value' => $model->recurring == 1 ? 'yes' : 'no'
モデルのセットを処理するGridView
とは異なり、DetailView
は1つだけを処理します。したがって、$model
は表示用の唯一のモデルであり、変数として表示できるため、クロージャを使用する必要はありません。
rkmによって提案された solution を確実に使用できますが、もっと簡単なオプションがあります。
ちなみに、許可される値は0
と1
のみなので、条件を少し単純化できます。
'value' => $model->recurring ? 'yes' : 'no'
値をブール値としてのみ表示する場合は、コロンを使用してフォーマッターサフィックスを追加できます。
'recurring:boolean',
'format' => 'raw'
は、htmlのない単なるテキストであるため、ここでは冗長です。
さらにオプションを追加する場合は、次を使用できます。
[
'attribute' => 'recurring',
'format' => 'boolean',
// Other options
],
これらのラベルはconfigで設定されたアプリケーション言語に応じて生成されるため、フォーマッターの使用はより柔軟なアプローチです。
公式ドキュメント:
この質問 も参照してください。これはあなたの質問と非常によく似ています。