Заменить value у атрибута в GridView

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
maksclub
Сообщения: 18
Зарегистрирован: 2017.07.12, 23:47

Заменить value у атрибута в GridView

Сообщение maksclub »

У модели Users есть поле в БД sex (пол)
значениря в БД записаны male и female

как в GridView вывести значения "муж" и "жен"?
maksclub
Сообщения: 18
Зарегистрирован: 2017.07.12, 23:47

Re: Заменить value у атрибута в GridView

Сообщение maksclub »

Сделал таким образом, но кажется как-то не так это делается:

Код: Выделить всё

 
 			[
                            'attribute' => 'sex',
                            'value' => function($data){
                                return \backend\models\Users::$sex_ru[$data->sex];
                            },
                            'format' => 'text'
                        ],
в самой модели:

Код: Выделить всё

    /**
     * @var array
     */
    static $sex_ru = [
        'female'    => 'жен',
        'male'      => 'муж'
    ];
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Заменить value у атрибута в GridView

Сообщение futbolim »

Это именно так и делается. Хотя, можно немного красивее (пример):

Код: Выделить всё

// model
/**
     * @param bool $colored
     * @return array
     */
    public static function getStatusLabels($colored = false) {
        $statuses = [
            self::STATUS_ACTIVE => ($colored ? '<span style="color: #60b35a">Активно</span>' : 'Активно'),
            self::STATUS_DISABLED => ($colored ? '<span style="color: #687269">Отложено</span>' : 'Отложено'),
        ];
        if(can('moder')) {
            $statuses[self::STATUS_DELETED] = ($colored ? '<span style="color: rgb(200, 217, 204)">Удалён</span>' : 'Удалён');
        }
        return $statuses;
    }

    /**
     * @param bool $colored
     * @return mixed|string
     */
    public function getStatusLabel($colored = false) {
        $labels = self::getStatusLabels($colored);
        return isset($labels[$this->status]) ? $labels[$this->status] : 'Неизвестный статус';
    }
// view
[
                    'attribute' => 'status',
                    'value' => function ($model) {
                        /** @var $model Product */
                        return $model->getStatusLabel(true);
                    },
                    'format' => 'raw',
                    'filter' => Product::getStatusLabels()
                ],
maksclub
Сообщения: 18
Зарегистрирован: 2017.07.12, 23:47

Re: Заменить value у атрибута в GridView

Сообщение maksclub »

futbolim писал(а): 2017.08.24, 11:22 Это именно так и делается. Хотя, можно немного красивее (пример):
спасибо, взял на вооружение
Ответить