• Как стать Middle после Junior и Senior после Middle?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Сколько нужно мне проработать в организации чтобы стать Middle если сейчас я Junior?


    я видел людей которые за 5 лет в "организации" настолько остановились в развитии что как были джунами так и оставались.

    Джуниор - решает стандартные задачи без вопросов с незначительными рисками.
    Мидл - решает нестандартные задачи с высокими рисками. Стандартные делает быстрее и с меньшим количеством багов.
    Синьер - решает нестандартные задачи с незначительными рисками то есть меньшим количеством багов. Могут менеджить людей или проекты с технической точки зрения.

    Вот и прикидывайте.
    Ответ написан
  • Как правильно использовать Guzzle?

    sggr
    @sggr
    PHP, Ruby, GO
    $this->client = new GuzzleHttp\Client(['base_uri' => AC_URL]);
    ...
    public function send($data) {
      $response = $this->client->request('POST', AC_URL, ['json' => $data]);
      return (array)json_decode($response->getBody()->getContents());
    }
    Ответ написан
  • Как использовать Принцип подстановки Барбары Лисков применительно к PHP?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    В PHP отсутствует Double Dispatching и перегрузка методов


    Double Dispatch в PHP:

    class Foo {
        // ...
        public function makeSomeStuff(Bar $bar)
        {
             $bar->doStuff($this->someData); // double dispatch!
        }
    }


    Перегрузка методов:

    class Foo {
        public function foo() {}
    }
    
    class Bar extends Foo {
        public function foo() {} // перегружен!
    }


    и в ответ на отличающуюся от базового класса/интерфейса сигнатуру он вывалится с ошибкой


    то что вы хотели сделать называется ad-hoc полиморфизм, и он есть из коробки в любом языке программирования с динамической типизацией. Достаточно просто не указывать явно сигнатуру, все довольно просто) Ну и да, минус этого то что это не явно и в рантайме. Для языков со статической типизацией явная "перегрузка" нужна только для того что бы компилятор мог построить таблицы диспетчеризации вызовов.

    Но решить проблему как-то нужно


    Перегрузка методов в наследниках с изменением сигнатуры это как раз таки нарушение принципа подстановки барбары лисков (LSP для сокращения).

    > Сервисы должны имплементировать какие-то общие методы, но помимо этого у них есть и специфичные методы.

    выносите "общие методы" в отдельный сервис и шарьте его как зависимость. Тогда у всех сервисов будут только специфичные методы и тогда будет достигаться принцип единой ответственности (который характеризуется как "у каждого объекта должна быть только одна причина для возможных изменений").

    p.s. венгерская нотация - это ужас. Все эти префиксы и суффиксы которые показывают кто есть тип (интерфейс, абстрактный класс) это вещи которые ломают всю красоту идеи полиморфизма и абстракции. Если хотите можем об этом пообщаться отдельно.

    Однако каждый из хендлеров может не работать с конкретной реализацией сервиса.


    Значит полиморфизм в нашем случае пошел погулять. Есть куча решений данной проблемы, в частности Chain of responsibility.

    > Visitor. Предполагает наличие в каждом из хендлеров методов типа handleService1(Service1 $service) и handleService2(Service2 $service), при этом один из методов остается пустым

    зачем так усложнять то? У вас должен быть снаружи только один публичный метод а внутри уже реализация сама разберется. Ну то есть если хотите - можете внутри сделать два приватных метода но это так же странно.

    > Массив маппинга, который говорит, какой хендлер может обрабатывать какой из сервисов.

    Опять же излишнее усложнение.

    Короче ваша проблема в том что у вас есть некие сервисы, с неким интерфейсом, которые по факту делают совсем разные вещи. То есть они априори не могут принадлежать к одному и тому же типу. Ну и нарушение LSP на лицо, вы не можете в коде заменить одну реализацию сервиса другой.

    Дальнейшие варианты возможны только после того, как вы опишите на высоком уровне что вам нужно сделать. Ну то есть не то к чему вы пришли а почему вы к этому пришли и какая задача стояла изначально.
    Ответ написан
  • Как по максимуму использовать Bootstrap 3 на Symfony 3?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1. в этом нет смысла. Можно выделить critical-path css и хватит.
    2. это делается не при помощи бандлов а при помощи всяких инструментов для сборки фронтэнда.
    3. тут тоже симфони не причем.

    Короч рецепт успеха - фронтэнд отдельно, бэкэнд отдельно.
    Ответ написан
  • Symfony куда ложить свои ф-ии / классы?

    OnYourLips
    @OnYourLips
    столкнулся с тем что незнаю куда положить свои пользовательские функции (хелперы) так чтобы они были доступны из всего приложения.
    Группируйте по области применения и из этого делайте сервис.
    Ответ написан
  • Какой фреймворк лучше подойдёт для масштабных и быстрых проектов, laravel и symfony2?

    Надо выбирать между laravel и symfony3, не 2. Да и вообще надо понимать, что Laravel написан на Symfony Components и это можно сказать, что Laravel "большая абстракция" над Symfony, хотя у него много крутых штук из коробки. Symfony менее монолитен, он построен на бандлах и это очень удобно. Symfony считается больше enterprise фреймворком, который больше подходит для больших приложений, хотя и Laravel может использоваться для создания крупных проектов. Они оба с хорошими перспективами и практически идут рука об руку. В новой версии Symfony будет будет с поддержка строгой типизации скалярных типов, которую добавили в PHP 7. А в новой версии Laravel теперь есть поддержка Vue.js из коробки. Короче всё таки выбирать вам. Вот мы недавно выбирали между Symfony и Laravel. Выбрали Symfony, в основном, потому что хотели его попробовать.
    Ответ написан
  • Как правильно добавить метаданные к сущности Symfony?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Вариант первый (тупой) - docs.doctrine-project.org/projects/doctrine-orm/en...

    Вариант второй (чуть более сложный и возможно более правильный) - страницы, категории и т.д. ничего не знают о метаданных. Метаданных знают за каким ресурсом они закреплены (урл, идентификатор сущности + сущность) и т.д. Мэпится все это сервисами и т.д. Так как нам в любой момент времени нужно всегда только один набор метаданных - нагрузку это не добавит, а вы сможете расширять это дело как хотите, и все изменения относящиеся к метаданным будут изолированы.
    Ответ написан
  • Почему PHP не видит класс через namespace?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Просто так все не происходит, особенно если у вас два класса из разных пространст имен лежат рядом.

    Гуглить про автозагрузку классов. Функции spl_autoload_register и в принципе почитайте про composer-вский автозагрузчик.
    Ответ написан
  • Как реализована COM технология?

    @SZolotov
    разрабатываю на Xamarin,WPF,Qt, Asp.net
    Я бы все таки посоветовал не заниматься некрофилией и интересоваться чем-то более современным и актуальным
    Ответ написан
  • Push уведомление о новой новости?

    Мы использует замечательный OneSignal. Веб-пуши в браузер/айос/андроид даже при закрытом сайте.
    Ответ написан
  • Как подготовиться к закону Яровой?

    @nirvimel
    1. Купите недорогой VPS (от $15/год, можно даже дешевле) и поднимите на нем личный VPN. В Сети есть куча подробных руководств как это делается. Только не надо говорить, что у вас нет на это денег, интернетом вы же не бесплатно пользуетесь. Просто примите это как небольшую дополнительную плату за интернет за ваш спокойный сон.
    2. Работая через VPN (обязательно), заведите себе новый почтовый ящик на зарубежном сервере у компании, у которой нет никакого бизнеса и любых коммерческих интересов в РФ. Пусть это будет не мажорный гигант индустрии, а скромная компания, малоизвестная в РФ. Главное - это наличие SSL в веб-интерфейсе и в IMAP, в остальном почта есть почта, она просто работает, и этого достаточно.
    3. Работая через VPN, заведите себе новый аккаунт в vk facebook и/или google (если вы неспособны полностью отказаться от использования социалок). При регистрации указывайте место проживания подальше от РФ. Учитывайте, что все гиганты индустрии, имеющие большой бизнес в РФ, полностью сотрудничает с ГБ, но аккаунты нерезидентов, зарегистрированные и посещаемые с зарубежных IP, они не станут сливать по умолчанию (но по первому запросу сольют мгновенно). Так что забудьте про любые приваты в социалках, ведите все общение так, как будто все это читает весь ваш квартал и все те, кому бы вам меньше всего хотелось это показывать. Для приватного общения пользуйтесь только безопасной почтой (пункт 2) и защищенными чатами, на telegram jabber на зарубежных серверах. Все это касается только тех, кто не может окончательно завязать с пагубной зависимостью от соц.сетей. Очевидно, наиболее безопасным (и полезным для здоровья) вариантом является полный отказ от социалок.
    4. Не вбрасывайте в старые ящики и соц.аккаунты адреса и ссылки на новые чистые, не указывайте новые адреса в любых исходящих и старайтесь, чтобы они не попали во входящие. Помните, что в любой социалке и любом веб-интерфейсе почты (сотрудничающей) кнопка "удалить" скрывает удаляемое только от вас самих и не более того.
    5. (Самый неприятный пункт) Забудьте про vk, mail.ru и российские gmail и facebook. - КАК? - Так! Я понимаю, что это не легко, что они давно стали частью вашей жизни. Но это придется сделать! Поговорите сами с собой, спросите себя что для вас важнее: ваша личная безопасность, спокойствие и крепкий сон или старые привычки, которыми вы опутаны, и которые не хотят отпускать вас? Учтите, что продолжая пользоваться местными социалками (и сотрудничающими иностранными), вы продолжаете каждый день генерировать на себя тонны компромата, который может обернуться против вас в самый неожиданный момент самым неприятным образом. Проявляя активность в своих старых аккаунтах, вы не даете им "протухнуть" и не даете даже формального повода добрым компаниям снести их через пол года, после истечения отведенного законом срока хранения (как известно, vk не ограничивается минимальным сроком хранения, а хранит все метаданные и текст практически вечно за исключением видео/аудио).
    Ответ написан
  • Нужно ли ставить запрет копирования текста на киносайте?

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

    @vilgeforce
    Раздолбай и программист
    Не нужно. Обойти защиту не сложно, смысла в ней нет. А гемор есть.
    Ответ написан
  • Нужно ли строго следовать стандартам PHP при разработки CMS?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    TL;DR
    Вы хотите потратить кучу времени просто так, увы. Если так хочется сделать cms - делайте, но возьмите за основу фреймворк, Silex например (лучше конечно Symfony, но там порог вхождения довольно высокий).

    -----------------------------------------------------------

    Use PSR-4 Luke!

    и в идеале мой namespace должен строится как:
    lib\<имя поставщика>\< namespace>\< имя класса>.... >


    Плохая идея, очень. Namespace стоит делать: < vendor >\< project >\<...>\ClassName
    Подключив зависимости через composer вы столкнетесь с тем, что путь к конечному файлу будет:
    vendor/< vendor >/< project >/.../ClassName.php
    И это вне зависимости от того, используется ли ваша cms, или нет. Путь всюду будет идентичным.

    с точки зрения проекта это было бы лаконично, понятно и удобно в функциональном плане

    Не повторяйте глупостей CodeIgniter. Ваша cms - это зависимость под вашим вендорингом, она не должна быть вперемешку с проектом на этой cms.

    PS: использовать composer не планирую, все библиотеки будут писаться мной, но планируется что для данной CMS системы могут разрабатываться сторонние модули и плагины.

    Зря, не делайте глупость. Автолоад и управление зависимостями - это решенная задача. Ваш вариант не будет лучше, примите за исходную.

    В проекте есть строгая классификация папок, грубо говоря классы модуля должны быть в папке с названием модуля внутри папки modules.....

    Что мешает сделать систему конфигурации у каждого модуля? Жесткое позиционирование файлов/каталогов - это как выровнять людей по высоте с помощью циркулярки))

    небольшие пояснения о том что подразмевается под modules | components | plugins

    Ваша классификация мягко говоря не очевидна. Обычно модуль - это некая крупная часть системы, состоящая из компонет. В вашей класификации плагин и модуль - это одно и тоже, просто разными словами.
    С моей точки зрения в этом разделении смысла нет. Это все равно некие зависимости вашего проекта на базе cms, просто они могут быть не портабельные, а разрабатываться под конкретный проект.

    А вот разделение по MVC было бы вполне не плохо. Не забудьте про консольное выполнение.

    каждый элемент системы как и сама система будут реализованы на основе MVC

    Если я правильно понимаю это получиться что-то типа HMVC. Если так - вам придется вывернуться на изнанку, что бы получилось И гибко И производительно И саппортабельно.
    Ответ написан
  • Нужно ли строго следовать стандартам PHP при разработки CMS?

    @karminski
    Разработчик CRM/ERP систем
    Следовать PSR - не догма, если вам безразлично будущее вашего проекта. Однако, если вы не хотите через годик сами запутаться где и что у вас лежит, если не хотите создать головную боль другим разработчикам (которые подхватят проект после вас) - PSR MUST HAVE.

    Загляните, например, сюда.
    https://github.com/yiisoft/yii2-app-advanced

    Посмотрите как там всё устроено.
    Ответ написан