Ответы пользователя по тегу PHP
  • WebSocket. На чём его можно использовать?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Давайте так, расскажу вам как самому себе отвечать на такие вопросы.

    1) у нас есть ключевое слово - WebSockets. Заходим в гугл и вбиваем, он отправляет нас читать википедию. Замечательно.
    2) там мы видим что это протокол поверх TCP и т.д. и тп. То есть гуглим все новые и непонятные для нас слова.
    3) как только мы ознакомились что это за штука, мы можем поискать реализации web socket сервера и глянуть требования.
    4) делаем выводы.
    Ответ написан
    7 комментариев
  • Как правильно передать token csrf?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    токен должен выдаваться сервером.
    Ответ написан
  • Какую ОС выбрать для локальной разработки на php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    это вообще нормально для профессиональных php разработчиков?


    Нет.

    так как хочу стать таковым , то меня интересует какой веб сервер использовать ?


    Ставьте себе убунту. Ну или virtualbox + ubuntu. Ну или vagrant. Ну или docker но это уже для продвинутых. Последние две штуки как раз и придуманы что бы невилировать (или хотя бы уменьшить) различия между окружениями.
    Ответ написан
    Комментировать
  • Как избежать дублирования в контроллерах?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Каким паттерном лучше всего решить данную проблему?


    Вы для начала не поняли зачем нужен контроллер. У вас логика "модели", то есть нашего приложения вытекла в контроллер, раз возникает дублирование. Контроллеры нужны для снижения связанности между UI (HTTP в нашем случае, шаблонизаторы и прочее) и непосредственно приложением. В вашем же случае у вас по сути нет того самого промежуточного слоя и контроллеры являются частью приложения, без которого оно не работает.

    В целом при дублировании обычно все решается очень просто - общую реализацию выносим в общую зависимость. Отдельный класс который делает дела и который юзают наши контроллеры. Сервис.
    Ответ написан
    Комментировать
  • Есть ли возможность настроиь отправку почты, без MX записей?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Возьмите smtp шлюз какой готовый (sendgrid - 12000 писем в месяц бесплатно, mailgun - 10000 писем бесплатно) и не парьтесь.
    Ответ написан
    3 комментария
  • Есть ли смысл осваивать визуальные редакторы HTML?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    только если вы дизайнер и верстка это не то чем вы будете заниматься.
    Ответ написан
    Комментировать
  • Почему правильнее делать сайт по mvc?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    У вас может быть и модель, и прдставление и контроллер хоть в одном файле, суть то не в этом.

    MVC описывает не все приложение (есть Model2 которое убого но описывает все приложение, но я бы не рекомендовал вам сейчас на него ориентироваться). Оно описывает только "как сделать так, что бы приложение ничего не знало о UI".

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

    Далее, у нас есть представление. Вопреки вашему мнению, представление это не html а http. Поскольку PHP должен сформировать именно HTTP ответ (так или иначе, при помощи echo и header или при помощи абстракций над http). Просто обычно сайтики в качестве тела ответа содержат html. Но намного проще воспринимать "представление" как HTTP ответ. "шаблонизаторы" в этом плане не относятся к представлению, это способ его генерации. Сделаем допущение что весь view в нашем MVC это обычный HTTP ответ. Просто кусок текстовой инфы выплюнутый в буфер вывода. Помимо HTTP есть еще варианты: CLI или консольные скрипты, у них сфой формат представления. А еще есть менеджеры очередей и кучи других вариантов.

    Так же есть еще HTTP запросы, которые по сути являются частью представления, а точнее может восприниматься как какое-то действие пользователя. Причем под пользователем я подразумеваю не обязательно живого человека, а все что угодно, что может отправлять запросы. Браузеры, боты, краулеры, ваше же приложение.

    Ранее мы уже сказали что "шаблонизаторы" это не часть представления а только способ его получения. Где мы должны использовать шаблонизатор тогда? Как сделать так, что бы наша "модель" или точнее наше приложение ничего не знало об этом "шаблонизаторе" (или сериалайзере, или json_encode, или еще чем-то там)? Положим между представлением и моделью что-то промежуточное - контроллер.

    Опять же контроллер - это не обязательно один объект. Это может быть целая цепочка объектов, которая может передавать запросы друг дружке и что-то с ними делать. Например один "контроллер" глянет мол "ага, он в качестве тела запроса прислал json - десериализуем". А второй контроллер такой "ага, он должен быть авторизован - надо проверить". Ну и т.д. покуда мы не дойдем до последнего контроллера в цепочке, который уже будет дергать "один" метод модельки. Это слой адаптеров между http и нашим приложением. Вот ключевая мысль MVC на бэкэнде (или ели точнее Mediating controller MVC или MVA, паттерн который реализован в большинстве современных бэкэнд фреймворков).

    Зачем нужно отделять UI от приложения? потому что что-то из этого явно меняться будет чаще и не одинаково. А еще можно распаралелить работу. А еще можно заменить реализацию одной из частей без вреда для другой. Словом мы получаем намного больше гибкости, но только если приложение ничего не знает о представлении.. В противном случае мы получаем антипаттерн под названием smart ui, для борьбы с которым 40 лет назад и придумывали MVC.
    Ответ написан
    3 комментария
  • Как реализовать ajax запрос в mvc?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Использую mvc модель


    почитайте еще раз что это такое и зачем оно надо.

    Я хочу подгружать текст статьи через ajax,


    Ajax, он же XmlHTTPRequest - это просто API для выполнения HTTP запросов из javascript. С точки зрения бэкэнда (то есть php) - это просто очередной http запрос. То есть никакой разницы.
    Ответ написан
    2 комментария
  • Как правильно писать названия переменных, функций и тому-подобное?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    нижнее подчеркивание у функции убираем и все уже чуть получше.

    В целом же названия надо делать осмысленными. То есть если не знаем как что назвать, просто формулируем что мы хотим сделать (на английском языке), и исходя из этого уже выдумываем названия:

    // calculate sum
    $sum = calculateSum(); 
    // generate report for premium users
    $sum = generateReport(new PremiumUsersSpecification());


    как-то так. Ну а что как, у меня такие правила:

    - константы - SCREAMING_SNAKE_CASE
    - названия объектов - UpperCamelCase
    - названия переменных, методов, функций и т.д. - lowerCamelCase
    - таблички/поля в бд, json, yml - snake_case
    Ответ написан
    Комментировать
  • Как может применяться Object Iterator?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Сначала разбираемся что такое "итератор", потом открываем доку, там в комментариях даже приводят ваш случай в качесве варианта использования. Ну и потом вообще разные виды итераторов смотрим.
    Ответ написан
  • Как безопасно выполнить исходный код PHP из строки?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    1) изолировать код в песочнице, передавать в качестве аргументов только то что можно юзать (php.net/manual/en/function.create-function.php)
    2) воспользоваться, например, nick/php-parser и удостовериться что не используются штуки типа global
    Ответ написан
    Комментировать
  • Чем связать php и java?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    pub/sub на rabbitmq/zeromq/activemq и т.д. Можно конечно RPC организовать но...
    Ответ написан
  • Какой стиль комментирования кода правильнее?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    с последовательным объяснением всех действий


    Пишите код так, что бы не нужно было комменты делать для действий, только для отдельных методов. Если вот совсем никак и надо объяснить что делает блок кода - выносим его в приватный метод с адекватным названием. Вот и все.
    Ответ написан
    5 комментариев
  • Совмещение angular, yii2?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Laravel бери и не мудри. Если нет нормального опыта работы с javascript (jquery не считается) - лучше не брать angular. Лучше погоди чутка пока не релизнится ng2, по ng1 слишком много булшита написано, достаточно вопросы на тостере глянуть.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    зачем они вообще нужны в работе, ведь всё хорошо и без них?


    Видите ли, паттерны это не что-то такое, что "применяют намерянно", они просто появляются. Им просто дали названия и все. Это "словарь", что бы быстро сказать другому разработчику мол "мы тут медиатор впихнем, а сверху вот этой фигни фасадом закроем". И всем сразу все понятно.

    Словом, если вы разберетесь с принципами SOLID и GRASP, а так же в принципе с ООП (сокрытие состояния, обмен сообщениями между объектами разных типов), то паттерны будут появляться сами по себе.

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

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Устойчивость - любой мэйнстрим язык

    Читаемость кода - это не имеет отношение к языку или платформе, сделать плохо можно всегда и везде.

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

    Словом... вот что разработчик знает, то и надо брать. Либо опять же на усмотрение разработчика.
    Ответ написан
    Комментировать
  • Как найти узкое место в производительности скрипта?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    https://blackfire.io/ - для профилирования кода.

    В целом первым делом надо думать над кешированием результатов парсинга, если это возможно, а не лазать каждый раз на удаленный сервер и т.д. Подозреваю что у вас именно так, и это и сжирает 99% времени.
    Ответ написан
    2 комментария
  • Как лучше работать с древовидной структурой на php?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    формируем массив категорий (ключ - название, значение - количество вхождений), формируем массив строк, считаем вхождения.
    Ответ написан
  • Где лучше проверять входные данные, в контроллере или в модели?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Данные надо проверять там, где они есть (гуглить "GRASP информационный эксперт").

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

    Модель же не должна входить в "невалидное состояние" за счет бизнес правил и т.д (банально не должно быть возможности вызвать какой-то метод и сломать целостность состояния модели). А стало быть валидировать ее нет смысла.
    Ответ написан
    2 комментария