2016-12-18 2 views
0

데이터베이스의 값을 기반으로 사용자 정의 통화 포맷터 + 변환기를 만들었습니다. 이 내가 같은 동작을 수행 할 수있는이 위젯에서 DetailViewYii2 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의 관계 데이터이지만 formatterGridView에 입력하는 방법을 알 수 없습니다.

데이터 형식을 GridView (으)로하고 싶을 때 문제가 발생합니다.

는 난에 포맷터를 사용해야 열에 NULL 값을 허용하므로 이미 NULL 값이 존재하는 경우, YII이

<span class="not-set">(not set)</span> 
같은 데이터를 송신하기 때문에

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

를 사용하는 아이디어를 버린

중 하나이며 내 사용자 정의 값 (다른 열 값이 NULL 인 다른 값으로 간주)을 설정하고 모든 (not set) 값을 처리하는 데 문제가 없도록하고 싶습니다.

또 다른 이유는,주의 할 수 있듯이, 내가 특성 매개 변수에 'format' => ...을 사용하면 해당 (not set) 값을 설정하기 전에 서식이 발생한다는 것입니다.

그래서 어쨌든 관계의 데이터 인 $model->currency->code을 해당 포맷터로 전달하려고 생각했습니다.

아이디어가 있으십니까? 감사.

답변

0

최악의 시나리오 I은 값이 '<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; 
} 
관련 문제