Вы возвращаете объект из функции, а не фактическое значение столбца rate
, вместо этого вы должны получить ошибку
htmlspecialchars () ожидает, что параметр 1 будет строкой, объект задан
скорее тот, который вы упоминаете, потому что столбец gridview ожидает, что вы вернете строку, и при попытке отобразить ячейку, используя yii\grid\DataColumn::renderDataCellContent
, который вызывает yii\i18n\Formatter
для отображения в виде текста, который находит объект вместо этого в вашем случае.
Также вы определили функцию как getter, и yii говорит:
Почти каждый базовый класс в структуре Yii начинается с yii\base\BaseObject
или дочернего класса. Это означает, что всякий раз, когда вы видите геттер или сеттер в базовом классе, вы можете использовать его как свойство.
И изменить свою функцию на
public static function getUSD()
{
$rate = Rate::find()
->select('rate')
->where(['currency_name' => 'USD'])
->orderBy('rate_id DESC')
->one();
return null !== $rate ? $rate->rate : 'NA';
}
И вызвать ее как показано ниже.
echo GridView::widget(
[
'dataProvider' => $dataProvider,
'summary' => '',
'columns' => [
[
'label' => 'USD',
'value' => function ($model) {
return $model->USD;
},
],
],
]
);
Если вы не хотите sh изменить функцию getUSD()
, то вам, возможно, придется проверить ее в сетке, как показано ниже
echo GridView::widget(
[
'dataProvider' => $dataProvider,
'summary' => '',
'columns' => [
[
'label' => 'USD',
'value' => function ($model) {
return null !== $model->USD ? $model->USD->rate: 'NA';
},
],
],
]
);