Yii2 GridView — формат атрибута, основанный на значении другого атрибута

Я сделал пользовательский конвертер валют + конвертер на основе значений из базы данных.
Вот как я использую это в DetailView

use yii\helpers\Html;
use app\commands\AppHelper;
use yii\widgets\DetailView;
use app\models\Part;

<?= DetailView::widget([
'model' => $model,
'attributes' => [
// ...
[
'attribute' => 'price',
'label' => (new Part())->getAttributeLabel('price_user'),
'format' => [
'currency',
AppHelper::getUserCurrencyCode(),
[
'convert' => true,
'currencyFrom' => $model->currency->code,
'currencyTo' => AppHelper::getUserCurrencyCode(),
],
],
],
// ...
],
]) ?>

В этом виджете я могу выполнить поведение следующим образом: когда есть числовое значение, оно форматируется, если есть NULL значение, обычное (не заданное) распечатывается …
уведомление $model->currency->code который является данными из отношения, в DetailView легко доступны, но я не могу понять, как получить эти данные в formatter в GridView,

Проблема в том, когда я хочу отформатировать данные в GridView,

я разрешаю NULL значения в столбце, которые мне нужно использовать для форматирования, поэтому я уже отбросил идею использования

'value' => function ($data, $key, $index, $column) { return $data->value; }

потому что когда NULL значение присутствует, yii отправляет такие данные

<span class="not-set">(not set)</span>

и либо я хочу, чтобы это было или установить мое собственное значение (учитывая другое значение для других столбцов с NULL значение), и я также хочу сохранить проблемы обработки всех этих (not set) ценности.

Еще одна причина, как я заметил, что если я использую 'format' => ... в параметрах атрибутов форматирование происходит перед установкой (not set) ценности.

Так что я думал о том, чтобы как-то передать $model->currency->code, который является данными от отношения к этому форматеру.

Есть идеи? Благодарю.

0

Решение

В худшем случае я буду использовать форматтер в значениях дампа значений, которые содержат '<span' или же NULL как это, но это ужасно, и мне это не нравится …

РЕДАКТИРОВАТЬ: я добавил пользовательский статический метод для форматирования неустановленных данных. Мне все еще не нравится это, но эй, это работает …: D

use yii\helpers\Html;
use app\commands\AppHelper;
use yii\grid\GridView;
use app\models\Part;

<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
// ...
[
'attribute' => 'price',
'label' => (new Part())->getAttributeLabel('price_user'),
'value' => function ($data, $key, $index, $column) {
return Part::requestPrice(Yii::$app->formatter->asCurrency(
$data->price,
AppHelper::getUserCurrencyCode(),
[
'precision' => 2,
'convert' => true,
'currencyFrom' => $data->currencyCode,
'currencyTo' => AppHelper::getUserCurrencyCode(),
]));
},
'format' => 'raw',
],
// ...
],
]); ?>

и в Part.php (модель части) я добавил метод

public static function requestPrice($price)
{
if (strpos($price, 'class') !== false || empty($price) || floatval($price) == 0)
return '<span class="not-set">' . Yii::t('app', 'na vyžiadanie') . '</span>';
else
return $price;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]