• Просветите по современным сервисам сбора и мониторинга логов, что выбрать с пользой и без ущерба карману?

    @topuserman
    Можно брать ELK-стэк + rabbitmq.

    В Монологе есть Amqp-хэндлер, и logstash-форматер,
    отправляете логи в очередь.
    А в logtash читаете из очереди.

    достаточно шустро работает на серьезных нагрузках.

    UPD: только заметил, что более 3 лет назад вопрос был..
    Ответ написан
    Комментировать
  • В чем преимущества ValueObject и DTO?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Преимущество VO в том, что это значения, которые уже проверены на границы и тип. В вашем примере валидация происходит в геттере - это мягко говоря бессмысленно. Вот вам пример
    class UUID
    {
        /** @var string */
        private $value;
    
        /**
         * @param string $value
         */
        public function __construct(string $value)
        {
            if (!preg_match('/^[\da-f]{32}$/', $value)) {
                throw new \InvalidArgumentException(
                    sprintf('Argument "$value" must be correct UUID, actual value: "%s"', $value)
                );
            }
            
            $this->value = $value;
        }
    
        /**
         * @return string
         */
        public function getValue(): string
        {
            return $this->value;
        }
    }


    Дальше в коде вам достаточно делать type hinting на тип VO и все, значение будет корректным. От рефлексии, или runkit вы все равно защититься не сможете.

    -- --

    DTO - это штука, для удобного транспорта данных, между разными частями системы. Например у вас есть метод, который на вход принимает 20+ аргументов (например регистрация), вызывать такое кодло вероятно будет не удобно, но собрав dto вы можете его передать одним аргументом и рассчитывать на то, что данные переданы с правильными типами. Граничные же значения придется проверить, так как в задачу "транспорта" не входит контроль правильности данных между системами, что его используют.

    но вот внутри в тех частях логика которых фиксирована и не может меняться - вполне подходит массив ключ-значение

    Использование KV в контексте DTO/VO - дико хреновая практика, в очень редких кейсах ее использование оправдывает себя. Дело в том, что массив - это набор произвольных данных. Что бы писать надежный код - вам придется на каждом этапе делать проверку правильности этого массива. Что это за проверки?
    * все нужные ключи существуют
    * все значения по этим ключам правильных типов
    * массив не содержит левых данных

    как реализовать на php типизированую коллекцию типа как в СИ

    class MyTypedCollection implements \Countable, \IteratorAggregate, \ArrayAccess
    ...
    Ответ написан
    2 комментария
  • Как сделать свой PUSH-сервер для ServiceWorker?

    SowingSadness
    @SowingSadness
    web-разработчик
    Ха ха ха. Нет не можете свой. Только те что поддерживают браузер.

    UPD
    Станислав Почепко, это все очень сложно, но можете почитать кучу статей по настройке push api, например https://medium.com/web-standards/реализуем-пуш-уве... где вы наткнетесь на понятие VAPID Key.

    VAPID Key - это ключ, где зашифрована информация о вашем сервисе доставки сообщений.
    И многие рекомендуют использовать https://firebase.google.com/docs/cloud-messaging/ (либо можно использовать Amazon SNS https://aws.amazon.com/ru/sns/faqs/)
    А уж этот сервис сам пойдет во все точки отправки сообщений для каждого устройства и отправит ваше сообщение.
    Ведь каждое конечное устройство или браузер жестко подписан на эти самые точки получения push уведомлений.
    Ответ написан
    2 комментария
  • Для чего нужны php-фреймворки?

    zorca
    @zorca
    И зачем нужен такой бесполезный Symfony:
    Magento
    Opencart
    Drupal
    Ответ написан
    1 комментарий
  • Как установить шаблонизатор BLADE на LUMEN?

    daager
    @daager
    Only Stateless APIs

    Lumen 5.2 represents a shift on slimming Lumen to focus solely on serving stateless, JSON APIs. As such, sessions and views are no longer included with the framework. If you need access to these features, you should use the full Laravel framework. Upgrading your Lumen application to the full Laravel framework mainly involves copying your routes and classes over into a fresh installation of Laravel. Since Laravel and Lumen share many of the same components, your classes should not require any modification.

    https://lumen.laravel.com/docs/5.2/releases#5.2.0

    Так что можно использовать либо старые версии, либо прикручивать самому. Torch вам в помощь.
    Ответ написан
    Комментировать
  • Кто использует vuetify в реальных проектах? При работе vuetify+vue есть преимущества по сравнению с бустрап+vur?

    lavezzi1
    @lavezzi1
    Учить стоит только js и vue. Vuetify и другие библиотеки это просто дополнительные инструменты для ускорения работы, которые лучше использовать в качестве "подсмотреть реализацию" и не делать свой проект зависимым от этих инструментов.
    Ответ написан
    4 комментария
  • Архитектура Laravel приложения .. Как правильно понять всю структуру?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Фасады в ларавел это не те фасады, которые паттерн, это псевдостатические алиасы для вызова методов элементов контейнера. Многие их не юзают, тем более, что оно без плагина barryvdh/ide-helper почти не юзабельно.

    Контракты это именно те самые банальные интерфейсы.
    Ответ написан
  • Как передать более 2-х переменных в шаблон Laravel в виде именованного массива?

    Skiphog
    @Skiphog
    Crutch developer
    В передаваемом массиве может быть любое! количество элементов. Никаких ограничений нет.
    Все переменные корректно разворачиваются в шаблоне.

    Возможно у вас отличаются имена переменных (в массиве и шаблоне)?
    Проскочила русская буква вместо англ?
    Ответ написан
    Комментировать
  • Как правильно разделить права пользователей?

    @Camaro67
    Помог? - "Отметить решением"
    Возможно, это решение вам понравится больше, чем entrust.

    Но мне не понятно где правильно архитектурно это делать.

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

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Итак, для начала следует разобраться в разнице между юнит-тестированием, интеграционным тестированием, функциональным тестированием и тестом на регрессии.

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

    Интеграционное тестирование означает проверку совместной работы компонентов системы. Например проверка того, что вызов метода контроллера создает запись в базе с определенной структурой. В данном случае проверяется интеграция контроллера с моделью. Более высокоуровневое интеграционное тестирование может быть проведено на уровне клиента, когда сервис возвращает нужный объект.

    Функциональное тестирование проверяет соотвествие требованиям проекта. Например, при нажатии кнопки Удалить появляется окно подтверждение с текстом "Вы уверены", затем при нажатии кнопки "Да", запись удаляется из БД и пользователю выводится сообщение "Запись успешно удалена!".

    Тест на регрессию - это повторная проверка работы конкретного участка кода. Как правило это участок кода, который не был покрыт тестами ранее.

    PHPUnit изначально предназначен для юнит-тестирования, однако это не мешает вам использовать его для других видов тестирования. Есть даже коннекторы к WebDriver.

    Тестирование контроллеров и моделей по отдельности - это юнит-тесты.
    Тестирование связки контроллер-модель - это интеграционное тестирование.
    Тестрование работы сайта целиком с помощью того же Selenium и т.п. - это функциональное тестирование.
    Ответ написан
    1 комментарий
  • Разве Composer бесполезен в 2017?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Вали от туда

    А вообще вопрос глуповат. Если там php 5.4 и Kohana старенькая, то конечно они не используют композер.
    Если нет тестов — не всегда плохо, очень много проектов без тестов работают. Да там ты не научишься хорошему программированию, но не так все ужасно... можно потихоньку их притащить, но не всегда это нужно бизнесу (вообще это задачи тимлидов и гигиены разработчиков)

    А вот ответ Тимлида ужасен. Почему это выяснилось не на собеседовании?

    Не ужели с вашим подходом к программированию и опытом вас не взяли в компанию получше?

    UPD: Очень хороший ответ ниже по ссылке -- Разве Composer бесполезен в 2017?
    Ответ написан
    3 комментария
  • Разве Composer бесполезен в 2017?

    search
    @search
    мама говорит что я особенный
    Композер - это, пожалуй, лучшее что произошло с пхп 5й версии.
    Валить или переубеждать тимлида - это по сути одно и тоже, если присмотреться. Просто демонстрация вашей неспособности брать на себя ответственность.

    Года 3 назад на моей прошлой работе в команду пришел очень толковый проактивный человек, который никого не стал переубеждать. Он просто стал делать правильные вещи. Без объяснений. И без приглашений. Коммитеть юнит тесты. Подключать линтеры. Деклайнить неудачные пулл-реквесты. В итоге он сам стал тимлидом где-то через год.

    Такие дела.

    Не у всех, правда, стальные яйца. Но за проактивность никогда еще не увольняли. Если вы уже создали пулл реквест, то "переубеждение" становится задачей тимлида.
    Ответ написан
    3 комментария
  • Best Practice при работе с репозиториями в Laravel?

    @D3lphi
    Да, по реализации все верно вы себе представляете.

    Как все это смотрится с AR?

    Откровенно скажу, с AR это смотрится хреново. В том смысле, что вы не используете основные "преимущества" (Да, да, в кавычках, потому что эти самые преимущества облегчают и ускоряют разработку, но никак не способствуют улучшению качества кода и его поддержке) этого паттерна.

    В каждом из таких репозиторий будут повторяющиеся методы: all, find и прочие. Как быть в таком случае? Как вынести подобные методы в общий класс?

    Создать базовый интерфейс для всех репозиториев и в нем описать эти методы, затем расширить интерфейс каждого конкретного репозитория. Можете плюсом ко всему написать абстрактный класс репозиторий и в нем написать универсальную реализацию этих самых общих методов (Для каждого типа репозиториев, разумеется). Но лично я бы так делать не стал.

    Правильно ли я размышляю вообще?

    Да, по реализации все верно вы себе представляете.
    Ответ написан
    6 комментариев
  • Как с помощью laravel загрузить и вернуть картинки?

    Markus_Kane
    @Markus_Kane
    Full-stack developer (Symfony, Laravel, Vue.js)
    В контроллере, который обрабатывает сохранение картинки, возвращайте переменную, в которую записан путь до файла.
    public function upload(Request $request) {
    $path = $request->file('image')->store('images');
    return $path;
    }

    И почитайте доку, в ней есть ответы на большинство типовых вопросов.
    Ответ написан
    1 комментарий
  • Что такое remember_token в laravel?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Во-первых, это не тип данных.
    Во-вторых, когда ты начнёшь читать документацию?
    Ответ написан
    1 комментарий
  • Нормальная ли практика инициализировать сессию при первом заходе на страницу сайта?

    Sanasol
    @Sanasol Куратор тега Laravel
    нельзя просто так взять и загуглить ошибку
    Ну если один из самых популярных в мире фреймворков из коробки так делает, то как вы считаете - это общепринято?

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

    LightAir
    @LightAir
    LA
    Конечно MVC каждый трактует по своему, тем не менее я не рекомендую так делать. Если Menu::getMenu() будет вызываться в нескольких местах то в случае изменения данных или имя модели/метода, то придётся искать все вызовы в шаблонах. Если понадобится протестировать, то тоже возникнут проблемы.
    Ответ написан
    2 комментария