search model и attribute lables

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

search model и attribute lables

Сообщение iamguruman »

Модель User и UserSearch
В модели User есть метод attributeLabels, который назначает названия колонкам и полям в формах, градах, детейлвью

В модель UserSearch добавил публичное $createdByLastnameWithInitials, добавил условия поиска, поиск работает

В модели UserSearch можно переопределить метод attributeLabels

По умолчанию его значение это

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

return parent::attributeLabels();
Вместо этого я добавляю

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

return [
            'createdByLastnameWithInitials' => 'Пользователь',
        ];
Название поля в гридах,формах, детелвью не меняются... остается Сreated By Lastname WithInitials ( https://disk.yandex.ru/i/Sf3BtwbQ8uGlUw )

Подскажите пожалуйста а можно ли в модели поиска переопредели метод attributeLabels задавать названия колонкам-строкам в детейлвью,градих, формах?

Если же в модели User в attributeLabels добавить createdByLastnameWithInitials, то название отображается как указано

Но хотелось бы определять название в модели UserSearch
makinaru
Сообщения: 6
Зарегистрирован: 2021.08.06, 12:24

Re: search model и attribute lables

Сообщение makinaru »

Покажите пожалуйста код контроллера, gridView, и код UserSearch
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: search model и attribute lables

Сообщение unknownby »

iamguruman писал(а): 2024.02.04, 15:35 Подскажите пожалуйста а можно ли в модели поиска переопредели метод attributeLabels задавать названия колонкам-строкам в детейлвью,градих, формах?
Ответ на вопрос: Да. Мы же наследование делаем.

Я недавно задался таким же вопросом, до просмотра форума, но руки не доходили проверить. :D
Решение оказалось довольно таки простым, под ваши нужды решение:

1. Внутри модели UserSearch добавляем (не забываем подключить ArrayHelper). Тут мы объединяем родительские лэйблы с моделью поиска.

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

    public function attributeLabels(): array
    {
        return ArrayHelper::merge(
            parent::attributeLabels(),
            [
                'createdByLastnameWithInitials' => 'Пользователь',
            ]
        );
    }
2. Весь нюанс был в методе search

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

    public function search($params): ActiveDataProvider
    {
        $query = User::find(); // так не сработают лэйблы
        $query = self::find(); // а вот так сработают из-за вызова текущей модели UserSearch и определения из этой модели лэйблов
     }
Ответить