Почему возникает ошибка Getting unknown property и странное поведение GridView yii2

144
08 февраля 2018, 17:48

Есть представление в котором создается GriedvView

GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
    ['class' => 'yii\grid\SerialColumn'],
    [
        'format' => 'text',
        'attribute' => 'Дата изменения',
        'value' => date('Y', $tdNews->cdate)
    ],
    [
        'format' => 'text',
        'attribute' => 'Дата публикации',
        'value' => date('Y/m/d', $tdNews->cdate)
    ],
    [
        'format' => 'text',
        'attribute' => 'Прежний заголовок',
        'value' => $news->name
    ],
    [
        'format' => 'text',
        'attribute' => 'Новый заголовок',
        'value' => $tdNews->news_name
    ],
    [
        'format' => 'text',
        'attribute' => 'Автор заметки',
        'value' => $tdNews->user_id
    ],
    ['class' => 'yii\grid\ActionColumn'],
],

]);

Данные в него попадают через контроллер вот так

    public function actionList() {
    $model = new ThisDay;
    $searchModel = new ThisDay;
    $dataProvider = $searchModel->search(Yii::$app->request->getQueryParams());
    $editNews = Yii::$app->request->post('ThisDay');
    foreach ($editNews["news_name"] as $year => $name) {
        foreach ($name as $newsId => $text) {
            $news = News::findNews($newsId);
            $model->news_name = $text;
            $model->old_name = $news->name;
            $model->user_id = Yii::$app->user->id;
        }
        $model->save();
    }
    return $this->render('list', ['model' => $model, 'editNews' => $editNews, 'year' => $year, 'name' => $name, 'dataProvider' => $dataProvider,
                'searchModel' => $searchModel]);
}

не обращайте внимания на код сохранения данные, суть не в нем. Суть в том, что при попытке открыть представление с GridViews получаю ошибку представленную на рисунке ниже

Из нее следует что GridView делает примерно следующее 'value' => обращаюсь к полю модели беря за название поля то, что после "=>"

Вопрос: почему он поступает именно таким образом? Разве он не должен просто подставлять данные из value в качестве информации в GridView и как можно исправить ошибку?

Answer 1

Попробуйте в value передавать анонимную функцию (по идее так и нужно).

Пример:

'value' => function($data) {
   //здесь в $data будет текущий объект из $dataProvider
   return date('Y', $tdNews->cdate);
}

P.S. Не совсем понятно, откуда берётся $tdNews в Вашем примере, и что внутри него.

READ ALSO
c++.что делает этот код?

c++.что делает этот код?

Здравствуйте,есть данный фрагмент кода,до конца не могу понять,что он выполняетмогли бы объяснить,что он делает? и есть ли возможность его...

145
Что делает std::remove_reference_t?

Что делает std::remove_reference_t?

Применяю std::remove_reference_t для выделения памяти под тип указателя, те

152
Оповещение об ошибках

Оповещение об ошибках

Как включить подчеркивание ошибок красными волнистыми линиями в QT Creator?

180
Чем отличаются стандарты c++14 и gnu++14?

Чем отличаются стандарты c++14 и gnu++14?

Есть ли существенные отличия между двумя стандартами c++14 и gnu++14 (расширение GNU)? Имеет ли смысл для компиляции под линуксом придерживаться...

168