Вызов метода в GridView

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
fname_lname
Сообщения: 8
Зарегистрирован: 2018.03.15, 12:22

Вызов метода в GridView

Сообщение fname_lname » 2019.09.10, 21:47

Здравствуйте. Имеется некий метод, к примеру:

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

class Orders extends ActiveRecord
{
  // ------------------------------------------
    public function getStatus($value)
    {
        switch ($value) {
            case '0': return 'Новый заказ';
            case '1': return 'Ожидает проверки';
            case '2': return 'Выполнен';
            case '3': return 'Отправлен';
            case '4': return 'Отменен';
            case '5': return 'Возврат';
        }
    }

}
Как мне теперь во вьюшках вызвать этот метод через GridView?

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

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'id',
  
            'name',
            'email:email',
            'phone',
            'address:ntext',
            'date_created',
            'date_updated',
            [
                'attribute' => 'status',
                'value' => '',          // ??????????????????
                'format' => 'html'
            ],

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

myks1992@mail.ru
Сообщения: 122
Зарегистрирован: 2017.11.15, 23:54

Re: Вызов метода в GridView

Сообщение myks1992@mail.ru » 2019.09.11, 00:22

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

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'id',
  
            'name',
            'email:email',
            'phone',
            'address:ntext',
            'date_created',
            'date_updated',
            [
                'attribute' => 'status',
                'value' =>  function(Order $model) {
                	return $model->getStatus($model->status)
                }
                'format' => 'html'
            ],

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

myks1992@mail.ru
Сообщения: 122
Зарегистрирован: 2017.11.15, 23:54

Re: Вызов метода в GridView

Сообщение myks1992@mail.ru » 2019.09.11, 00:25

Но я бы использовал так:

Создаем хэлпер. Можно в модели, можно отдельным хэлпер-классом

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

public static function names(): array
{
        return [
            self::NEW
            self::ACTIVE
            self::REJECTED
            self::CANCELLED
        ];
}
создаем файлик с переводами "order-status-name' Подключаем его в переводах.В нём создаем такой код:

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

return [
    Status::NEW => 'Новый',
    Status::ACTIVE => 'Активный',
    Status::REJECTED => 'Отклонён',
    Status::CANCELLED => 'Отменён',
];
И используем так:

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

[
   'attribute' => 'status',
   'value' => Yii::t('order-status-name', $model->status),=
],

fname_lname
Сообщения: 8
Зарегистрирован: 2018.03.15, 12:22

Re: Вызов метода в GridView

Сообщение fname_lname » 2019.09.11, 20:28

спасибо, помог

Аватара пользователя
Chelobaka
Сообщения: 126
Зарегистрирован: 2018.06.01, 09:54

Re: Вызов метода в GridView

Сообщение Chelobaka » 2019.09.12, 10:17

Скорее всего параметр уже определен в самом объекте. Поэтому нужен скорее всего его перевод.
$user->getStatus();

Выведет статус текущего объекта.


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

  public static function getStatuses()
    {
        return [
            User::STATUS_DELETED => Yii::t('user', 'Deleted'),
            User::STATUS_INACTIVE => Yii::t('user', 'Unactive'),
            User::STATUS_ACTIVE => Yii::t('user', 'Active'),
            User::STATUS_BLOCKED => Yii::t('user', 'Blocked'),
        ];
    }
    
    public function getStatusName()
    {
        $status = self::getStatuses();
        return $status[$this->status];
    }
    
Если статус не известен в объекте, то можно сделать так:

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

 public function getStatusByIndex($index)
    {
        $status = self::getStatuses();
        return $status[$index];
    }
    

Ответить