• Какие существуют хорошие готовые решения для реализации data transfer object на php?

    Вообще не валидируем DTO. Он нужен только для перекидывания данных из одного слоя в другой. Что с этими данными будет на той стороне уже не касается того кто его создавал: на этапе создания dto уже поздно думать что где-то данные не того допуска, так как мы их либо из базы достали или сервиса или просто сгенерировали на лету. Принимающая сторона, если нужно, может провалидировать значения перед использованием и если что-то окажется за пределами допустимых значений как-то обработать данный кейс.

    В данном контексте можно вспомнить про команды и запросы для CQRS. Мы их создаем через сериализатор: на вход подается массив данных для заполнения полей в создаваемой команде/запросе и класс команды/запроса в котором через аннотации указаны параметры валидации.
    Ответ написан
    Комментировать
  • Symfony serialize при добавлении определенной связи перестает работать, почему?

    Так как у вас не просто первый класс ссылается на второй и второй на первый, а через третью сущность, то Doctrine неверно их обрабатывает. В таком случаи стоит убрать вывод поля user.assignedTickets, как раз через упомянутый вами массив
    [AbstractNormalizer::ATTRIBUTES => ['assignedUsers' => ['assignedTickets']]
    , тогда структура будет плоская, но без ухода в рекурсию.

    Есть где посмотреть примеры как на относительно реальных примерах работают с сериализатором этим?

    Только документация, а дальше уже нужно просто продумывать все запросы. Если говорить относительно этйо задачи, я бы на вашем месте сделал просто один метод в классе репозитория билетов и в нем реализовал SQL-запрос в обход Doctrine, так как в итоге необходимо получить json, а использование ORM дает большие накладные расходы и неоптимальные пачки запросов к БД.
    Ответ написан
    Комментировать
  • Как сделать так чтобы переводчик не трогал теги?

    Если у библиотеки которую вы используете нет возможности не переводить тэги, то можно перед тем как переводить разбивать текст по тэгам и переводить отдельными отрывками, после чего собирать обратно документ с вложением перевода в тэги. Для этого можно использовать, к примеру SimpleXML.

    Если же хочется именно заменять тэги, то можно попробывать такой способ: <div> -> <1>, <p> -> <2> - после замены всех тэгов переводим текст и потом восстанавливаем тэги в тексте. Но результат тут зависит очень сильно от сервиса переводов.
    Ответ написан
  • При переходе с 5.6 на 7 php начал выдавать Function name must be a string как изменить код?

    PHP до 7 версии интерпретировала подобные вырожения как: $this->{$value['type']}( $value ). Начиная с 7 версии и выше - ($this->$value)['type']( $value ).
    Используйте явный синтаксис(фигурные скобки), чтобы код выполнялся как в 5 версии. Пример
    Ответ написан
    Комментировать
  • Как сверстать данный макет с Grid?

    Если высота и ширина элементов класса .container являются константными значениями, то можно сделать так:
    https://codepen.io/jimmdigrizli/pen/xxbEBym

    Чуть сложнее вариант, но чуть более правильный:
    https://codepen.io/jimmdigrizli/pen/WNbGmWO
    Ответ написан
    Комментировать
  • Надо делать наследование или нет?

    Есть хороший способ определить рациональность использования наследования. Для этого нужно ответить на ряд вопросов:
    - оба класса из одной предметной области;
    - наследник отвечает принципу подстановки Барбары Лисков;
    - код наследуемого класса необходим либо хорошо подходит для наследника;
    - наследник в основном добавляет логику.
    Чем больше положительных ответов, тем больше вероятность, что вы не промахнетесь с выбором наследования.

    Конкретно в вашем случае я рискну предположить, что использование наследования излишне, и даже может стать бомбой замедленного действия при дальнейшем развитии системы. Здесь наследование выступает в роли выбора возможных алгоритмов действий пользователя в системе и введение новых ролей может оказаться очень дорогим, особенно если один пользователь должен будет обладать сразу несколькими ролями.
    Ответ написан
    Комментировать
  • Как правильно организовать частичное кэширование динамики в nginx?

    Сам nginx не умеет кешировать (upd: кешировать нужные блоки на страницах), но можно использовать Varnish с ESI для кеширования динамических блоков сайта. Самый простой способ это поставить Varnish перед nginx (тогда Varnish будет на 80 порту, а nginx на любом другом), но чтобы добиться высокой производительности лучше повозиться и настроить связку nginx - Varnish - nginx, что более сложно, но скорее всего даст более желаемый результат в вашем случае.
    Ответ написан