Как правильно расширить класс из vendor?

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

Как правильно расширить класс из vendor?

Сообщение Nicolai6120 »

Есть классы Vkontakte, Twitter, Odnoklassniki, etc., из состава расширения authclient.

Необходим метод, который бы выделял никнейм из полей данных.

К примеру на Vkontakte. Предоставляются поля:

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

[first_name] => Djon [last_name] => Doe [nickname] => [screen_name] => coolDjon
При этом у кого-то поле "nickname" может оказаться и заполненным... А у кого-то и "screen_name" и "nickname" окажутся пустыми и тогда нужно будет взять и слепить first_name + last_name. Короче нужен метод, который эту логику реализует. Нужно как-то дополнить класс ..\vendor\yiisoft\yii2-authclient\clients\VKontakte.php.

Вопрос, как это грамотно сделать в стиле yii2? Я понимаю что должен создать свой класс отнаследованный от этого, но не понимаю, куда он должен быть положен в advanced шаблоне.

Может в /common/components? Является ли такой класс компонентом? Если да, то предвижу что в этой папке будет просто море разнородных классов, и в итоге будет сложно искать нужные. Есть ли рекомендации по организации структуры этой папки?

А может тут паттерн применить? Ведь такой метод нужно будет приписать к каждому клиенту, а их много...
Последний раз редактировалось Nicolai6120 2017.02.19, 21:16, всего редактировалось 1 раз.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Как правильно расширить класс из vendor?

Сообщение rak »

да как угодно на самом деле, никаких ограничений на структуру нету
например, /common/components/authclient/clients
или закинуть эти классы в модуль user(если он есть)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Как правильно расширить класс из vendor?

Сообщение zelenin »

Nicolai6120 писал(а): 2017.02.19, 21:11Может в /common/components? Является ли такой класс компонентом?
компонент - это все, что угодно, кроме модели.
Nicolai6120 писал(а): 2017.02.19, 21:11Если да, то предвижу что в этой папке будет просто море разнородных классов, и в итоге будет сложно искать нужные
откройте для себя поддиректории.
Nicolai6120 писал(а): 2017.02.19, 21:11А может тут паттерн применить?
примените) расскажите нам какой примените.
Nicolai6120
Сообщения: 143
Зарегистрирован: 2014.08.13, 15:08

Re: Как правильно расширить класс из vendor?

Сообщение Nicolai6120 »

Zelenin)) Я вот подумал... А если я добавляю только некоторым классам наследующим OAuth2 метод getNickname(), это ведь не по феншую... Я в коде буду делать:

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

$nickname = $this->client->getNickname();
И рано или поздно наткнусь на то, что забыл этот метод добавить в какой-то из клиентов... Или это паранойа?

И как-то просто странно такой код выглядит, т.к. getNickname по сути к клиенту OAuth2/OAuth имеет слабое отношение, такое ощущение, что это обязанность другого класса, нет такого ощущения? Хотя с другой стороны, создавать под эту цель отдельный класс VKontakteNicknameExtractor тоже наркомания))
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Как правильно расширить класс из vendor?

Сообщение zelenin »

Nicolai6120 писал(а): 2017.02.19, 22:32 Zelenin)) Я вот подумал... А если я добавляю только некоторым классам наследующим OAuth2 метод getNickname(), это ведь не по феншую
интерфейсы
Nicolai6120
Сообщения: 143
Зарегистрирован: 2014.08.13, 15:08

Re: Как правильно расширить класс из vendor?

Сообщение Nicolai6120 »

что интерфейсы?) вернее, как интерфесы?))
Последний раз редактировалось Nicolai6120 2017.02.19, 22:39, всего редактировалось 1 раз.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Как правильно расширить класс из vendor?

Сообщение zelenin »

Nicolai6120 писал(а): 2017.02.19, 22:36 что интерфейсы?)
для этого используются.
Nicolai6120
Сообщения: 143
Зарегистрирован: 2014.08.13, 15:08

Re: Как правильно расширить класс из vendor?

Сообщение Nicolai6120 »

У всех этих классов в основе ClientInterface, а потом они наследуются раз несколько от более базовых классов. И как в эту цепочку воткнуть интерфейс добавляющий один метод?
Nicolai6120
Сообщения: 143
Зарегистрирован: 2014.08.13, 15:08

Re: Как правильно расширить класс из vendor?

Сообщение Nicolai6120 »

ClientInterface -> BaseClient -> BaseOAuth -> OAuth2 -> VKontakte
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Как правильно расширить класс из vendor?

Сообщение rak »

например, добавить интерфейс с нужным методом для своих классов, а в обработчике авторизации проверять на принадлежность к интерфейсу и в зависимости от этого строить дальнейшую логику
Ответить