Виртуальные атрибуты ActiveRecord

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Виртуальные атрибуты ActiveRecord

Сообщение ShNURoK »

Доброй ночи,

сейчас если создать в ActiveRecord метод

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

public function getUsername()
{
    return $this->username;
}
то по вызову $model->username этот метод не вызовется.
Как я понимаю, это связано со связями (relation), хотя в голове крутиться что-то с грязными атрибутами, вроде давно читал об этом в issues каком-то. Но не суть.

Скажите почему нельзя сделать аналог mutators как в laravel? Что мешает? На что повлияет? Где я затроил?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Виртуальные атрибуты ActiveRecord

Сообщение ElisDN »

Это связано с реализацией метода BaseActiveRecord::__get, который сначала ищет атрибут, а потом уже ищет геттеры в parent::__get. Так что если хотите сделать свою реализацию, то просто переименуйте метод:

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

public function getOtherUsername()
{
    return $this->username;
} 
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Виртуальные атрибуты ActiveRecord

Сообщение ShNURoK »

ElisDN писал(а):Это связано с реализацией метода BaseActiveRecord::__get, который сначала ищет атрибут, а потом уже ищет геттеры в parent::__get.
Об этом я знаю, и написал свои предположения почему так сделали, в yii1 было не так.
Предложенный вами вариант меня не устраивает тем, что появляются лишние виртуальные свойства. Я попробовал реализацию из laravel, посмотрим как будет работать. Интересно почему в yii2 не добавили подобную реализацию.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Виртуальные атрибуты ActiveRecord

Сообщение ElisDN »

ShNURoK писал(а):Интересно почему в yii2 не добавили подобную реализацию.
Наверное потому, что Вы им не предложили сделать по-другому :)
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Виртуальные атрибуты ActiveRecord

Сообщение ShNURoK »

ElisDN писал(а):Наверное потому, что Вы им не предложили сделать по-другому :)
Вот что нашел, https://github.com/yiisoft/yii2/issues/2262
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Виртуальные атрибуты ActiveRecord

Сообщение samdark »

Подумываю смёржить https://github.com/yiisoft/yii2/issues/9656. Тесты вроде проходят, но что-то, чую, может сломаться...
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Виртуальные атрибуты ActiveRecord

Сообщение ShNURoK »

Sam Dark писал(а):Подумываю смёржить https://github.com/yiisoft/yii2/issues/9656. Тесты вроде проходят, но что-то, чую, может сломаться...
Александр, а что дает этот PR? Создание этой темы - есть последствие не осиливания этого PR.
Я пробовал его использовать, еще до этой темы и issue на гитхабе, но это не привело к приоритету к сеттерам и геттерам перед виртуальными атрибутами. Видимо что-то не так понял. Там вроде меняется обращение в классе с _attribute['name'] к getAttribute($name), но это же внутренняя работа класса, на что это должно повлиять?
По-английски плохо понимаю, в общем так и не понял, что дает этот PR. В теме вроде про эту проблему, а как PR это исправляет не могу понять.

Не проще ли будет добавить аналог из laravel? Это не будет конфликтовать с relation, если следовать соглашению именования.
Ответить