Yii2, Как обратиться к свойству модели вызывая геттер?

У меня есть таблица отзывов, которая генерируется с помощью гридвью:

echo GridView::widget([
    'id' => 'pages-grid',
    'dataProvider' => $dataProvider,
    'filterModel'  => $searchModel,
    
    //'options'      => ['class' => ''],
    'tableOptions' => ['class' => 'table table-bordered'],
    //'rowOptions'   => ['class' => ''],
    
    'layout' => '<div class="GridViewSummary">{summary}</div><div class="panel panel-default"><div class="table-responsive">{items}</div><div class="table-footer">{pager}</div></div>',
    
    'columns' => [
        [
            'attribute' => 'user',
            'format' => 'html',
            'label'  => Yii::t('articles.main', 'Автор'),
            'contentOptions' => ['class'=> 'tdAuthor'],
            'value' => function ($model) {
                return UserColumn::widget([
                    'userId' => $model->user_id
                ]);
            }
        ],
        [
            'attribute' => 'text',
            'contentOptions' => ['class'=> 'tdText'],
            'format' => 'html',
            'value' => function ($model) {
                return '<div class="text-left">' . $model->text .  '</div>';
            }
        ],
        
        [
            'attribute' => 'date_create',
            'format' => 'html',
            'contentOptions' => ['class'=> 'tdDate'],
            'value' => function ($model) {
                return '<div class="text-center">' . $model->dateCreate . '</div>';
            },
            'filter' => '<div class="text-center">' . Yii::t('app','Нет фильтра') . '</div>',
        ],
        
        [
            'attribute' => 'date_update',
            'format' => 'html',
            'contentOptions' => ['class'=> 'tdDate'],
            'value' => function ($model) {
                return '<div class="text-center">' . $model->dateUpdate . '</div>';
            },
            'filter' => '<div class="text-center">' . Yii::t('app','Нет фильтра') . '</div>',
        ],
        
        [
            'format' => 'html',
            'contentOptions' => ['class'=> 'tdControl'],
            'label'  => Yii::t('app', 'Управление'),
            'value' => function ($model) {           
                return '<div class="text-center">' 
                            . Html::a('<i class="icon-wrench"></i>', ['/reviews/default/update', 'id' => $model->review_id])  . ' &nbsp; '
                            . Html::a('<i class="icon-remove3"></i>', ['/reviews/default/delete', 'id' => $model->review_id]) 
                       . '</div>';
            },
        ],
    ]
]);


Есть два поля, дата добавления и дата редактирования отзыва. Ранее я делал так:
[
            'attribute' => 'date_update',
            'format' => 'html',
            'contentOptions' => ['class'=> 'tdDate'],
            'value' => function ($model) {
                return '<div class="text-center">' . DateFormat::load()->dateToBigString($this->date_update) . '</div>';
            },
            'filter' => '<div class="text-center">' . Yii::t('app','Нет фильтра') . '</div>',
        ],


Этот способ отлично работает, но я попробовал вынести это дело в геттер.

В основной моделе я сделал следующее:
/**
	 * Возвращает отформатированную дату
     * @return string
	 */
	public static function getDateUpdate()
	{
		return DateFormat::load()->dateToBigString(self::date_update);
	}


И собственно, мне ответили:
Undefined class constant 'date_update'

Честно говоря, я не понял, почему так происходит, и можно ли сделать геттер, который бы возвращал отформатированную дату?
  • Вопрос задан
  • 6168 просмотров
Решения вопроса 1
@Cage
Вы для начала определитесь что вы хотите получит в результате вызова статического (кстати почему статического?) метода getDateUpdate?
варианты:
1. Некую дату из константы определенной внутри класса модели, как это сейчас (только константа не определена).
2. Некую дату из статического свойства класса модели, тогда код будет выглядеть так:
public static function getDateUpdate()
{
	return DateFormat::load()->dateToBigString(self::$date_update);
}

3. Все таки значение атрибута конкретного объекта модели, тогда никакой статики и геттер будет выглядеть так:
public function getDateUpdate()
{
    return DateFormat::load()->dateToBigString($this->date_update);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы