Yii2. Ссылка в gridview для связанных моделей

459
16 марта 2017, 23:38

Здравствуйте. Как сделать ссылку в gridview я знаю, но возникла проблема с ссылкой для связанной модели.

<?php Pjax::begin(); ?>    <?= GridView::widget([
    'dataProvider' => $dataProvider,
    'summary' => 'Показано {begin} - {end} из {totalCount} записей',
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'competition.title',
        [
            'attribute' => 'competition.title',
            'value' => function (ACompetition $data) {
                return Html::a(Html::encode($data->title), Url::to(['/' . $data->category->slug . '/' . $data->slug . '/' . $data->id]));
            },
            'format' => 'raw',
        ],
...

Само по себе 'competition.title' работает, но вот со ссылкой не хочет, пишет такую ошибку:
Argument 1 passed to yii\base\View::{closure}() must be an instance of common\models\ACompetition, instance of common\models\AOption given. Понимаю, что первый аргумент должен принадлежать к модели ACompetition, но что-то у меня не получается.
Подскажите пожалуйста, что не так?

Answer 1

Для простоты кода во view.. сделай в модели ACompetition функцию которая возвращает нужную ссылку (код останется почти таким же как у тебя внутри функции, просто вместо $data будешь обращаться к самой модели ($this) назовешь её например getCompetititonHref(), а потом во вьюшке к ней обратишься как столбцу 'competitionHref:html' и все будет ок. В ссылке кстати не забудь отключить pjax, ['data-pjax'=>0] иначе не будет корректно переходить. Такой подход нормальный имхо, но нужно добавить правило сортировки для поля.

READ ALSO
Многомерный массив, $_SESSION и вывод foreach

Многомерный массив, $_SESSION и вывод foreach

Здравствуйте, подскажите, пожалуйстаЗаполняю массив следующим образом и записываю его в переменную $_SESSION:

288
Разница в датах [дубликат]

Разница в датах [дубликат]

На данный вопрос уже ответили:

311
Получить выборочные столбцы из БД

Получить выборочные столбцы из БД

Пример: есть таблица (на картинке)Как сделать так, чтобы изменяя option_id, option_value оставался такой, какой был установлен изначально (т

241
Кэширование изображений на сайте, PHP

Кэширование изображений на сайте, PHP

ЗдравствуйтеПроблема вот в чём: есть страница пользователя

283