データベースからの値に基づいてカスタム通貨フォーマッタ+コンバータを作成しました。 これは私が私はこのような動作を実現することができます。このウィジェットではDetailView
Yii2 GridView - 他の属性の値に基づく属性形式
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
値、通常の(未設定)がある場合に印刷され、フォーマットされアウト... DetailView
のリレーションからのデータである$model->currency->code
がありますが、そのデータをformatter
のGridView
に取得する方法がわかりません。
データをフォーマットするときに問題が発生するのは、GridView
です。
私は上のフォーマッタを使用する必要がある列にNULL
値を許可し、そうNULL
値が存在する場合、Yiiのはこの
<span class="not-set">(not set)</span>
のようにデータを送信しますので、私はすでに
'value' => function ($data, $key, $index, $column) { return $data->value; }
を使用してのアイデアを捨てました
と私はカスタム値(NULL
値で他の列の値が異なると考えて)を設定したいと思っています。
もう1つの理由は、私が気付いたように、属性パラメータで'format' => ...
を使用すると、書式設定はそれらの値を設定する前に起こるということです。
だから私は何とか関係からのデータである$model->currency->code
をそのフォーマッタに渡すことを考えていました。
アイデア?ありがとう。