Size: a a a

2022 January 13

SP

Sergey Protko in symfony
> А в моем случае, нужно всего лишь сделать свою обертку над одним методом.

это и есть адаптер
источник

SP

Sergey Protko in symfony
class Foo {
   fun doHast() {}
}

class Bar (val foo: Foo) {
   fun newSignature() {
       foo.doHast()
   }
}
источник

v

voiciano in symfony
Понял, спасибо большое!

Тогда уточнение в контексте этого вопроса:

Например, у меня есть класс
class EventManager {

   function addEventHandler($a, $b, $c, $d) { .. }

   // другие методы

}

и мне нужно упростить сигнатуру для addEventHandler, чтобы аргументы принимались массив (для примера).

Я сделаю так:

class EventManagerAdapter {

  // тут внедрение зависимости - EventManager

  function  addEventHandler($array) {
         // .. как-то изменил $array
         $this->eventManager->addEventHandler(..$array);  
   }

}

Вопрос:

1. Нужно ли как-то выделять интерфейс какой-то ?
2. Как быть с неймингом адаптера? разве этот адаптер для EventManager'a ?
источник

gp

gogi power in symfony
вместо $array  - иногда удобнее юзать обьект который создается и наполняется етим массивом и передается аргуметом в евенты/методы как аргумент. Его можна в сигнатуре других методов описать и рефакторить удобнее
источник

VM

Volodymyr Melko in symfony
Адаптер это одна из частей инверсии зависимостей. Твой код зависит не от стороннего ивент менеджера, с которым ты ничего сделать не можешь. Он зависит от твоего интерфейса.
В своем интерфейсе ты описываешь те методы, которые тебе нужны в таком виде, который тебе удобен. Адаптер - это реализация твоего интерфейса.

Делать ли интерфейс именно интерфейсом зависит от того, будет ли у тебя несколько реализаций. Ну ещё типа можно разнести по слоям, если надо. Интерфейс в твоём коде, а адаптер в инфраструктуре какой-то, если нужно.
источник

VM

Volodymyr Melko in symfony
Ну а так, то не обязательно адаптер называть адаптером. Назови его просто ивент менеджером  и юзай вместо исходного, если тебе не нужны эти все слои
источник

AL

Amber LEX in symfony
Привет всем.
Не подскажите, есть где-то для симфони markdown-editor
Я этот нашел https://github.com/kartik-v/krajee-markdown-editor - вроде новый относительно
источник

AL

Amber LEX in symfony
И там есть кнопка добавления изображения и предлагается просто ввести ссылку. Неужели кто-то так будет делать? Где-то видел при нажатии - всплывает  типа elfinder (не помню точно) и при выборе изображения ссылка вставляется сама. Это плагин нужен или самому пилить?
источник

v

voiciano in symfony
Подскажите плз, у меня метод в качестве аргумента получает строку - полное название класса.

Далее в этом методе нужно проверить, является ли перееденная строка классом, который реализует определенный интерфейс.

Можно ли делать так: if ($my_argument instanceof MyInterface) ?
Будет ли это корректно работать со строками ?

И второй вопрос, какое исключение выбрасывать, если интерфейс все-таки не реализует нужный интерфейс? есть ли в симфони встроенные экзепшены такие?  или как принято называть такой экзепшен?)
источник

v

voiciano in symfony
ps: в аргумент нужно принимать именно строку))
источник

AD

Andrey Dembitskyi in symfony
источник

VM

Volodymyr Melko in symfony
is_a
источник

v

voiciano in symfony
а почему instanceof не будет подходить?
источник

v

voiciano in symfony
глянул доку, не вижу разницы
источник

VM

Volodymyr Melko in symfony
Потому что нужен кму объект для сравнения
источник

VM

Volodymyr Melko in symfony
Оператор instanceof используется для определения того, является ли текущий объект экземпляром указанного класса.
источник

VM

Volodymyr Melko in symfony
первая же строка в доке, йопти
источник

v

voiciano in symfony
источник

VM

Volodymyr Melko in symfony
еще можно глянуть на class_implements, она вернет все интерфейсы класса по объекту или строке класснейма
соотвественно in_array + class_implements
источник

v

voiciano in symfony
у instanceof  видел пример, что он со строками тоже может
источник