Обновить
43.72

PHP *

Скриптовый язык общего назначения

Сначала показывать
Порог рейтинга
Уровень сложности

Joomla-дайджест. 1-й квартал 2025 года

Время на прочтение35 мин
Количество просмотров1.1K

После долгого перерыва читайте все главные новости из мира Joomla с момента выхода Joomla 5.2.0 (15 октября 2024 года) в одной статье. Но для удобства в названии ограничимся первым кварталом 2025 года. Традиционно наш дайджест обозревает новости, расширения, шаблоны и статьи из мира Joomla.

Читать далее

Ускоряем каталог интернет-магазина с помощью Elasticsearch

Уровень сложностиСредний
Время на прочтение71 мин
Количество просмотров2.7K

Привет читатель, на связи Владимир, техлид команды бэкенд-разработки в fashion бренде Befree. За время жизни и развития нашего интернет-магазина накопилось некоторое количество любопытных, на наш взгляд, решений, и появилось желание начать делиться этими решениями с сообществом. Начнем с рассказа о каталоге товаров и о том как этот каталог со временем преображался.

Предыдущий каталог товаров делался во времена, когда и трафика, и товаров было в десятки раз меньше по сравнению нынешним временем. Тот каталог толком не имел механизмов для фильтрации и кастомизации. У менеджеров интернет-магазина не было инструментов управления логикой вывода товаров, чтобы покупатель видел то, что надо бизнесу. Много товаров терялось на задворках каталога, поэтому верно сказать, что для покупателя доля товаров оставалась не представлена, т.к. мало кто листает десятки страниц, чтобы найти там модель из новой коллекции, которая почему то не на первой странице. Это осложнялось еще и тем, что в каталоге имелся скудный набор характеристик товаров, что не давало вывести покупателям нормальные фильтры. Имелись и другие проблемы: при значительных скачках трафика, например во время рассылки пушей, каталог банально переставал справляться с нагрузкой.

Требования, которые команда сформулировала к новому каталогу:

Читать далее

Пример HTTP-сервера на PHP с использованием файберов. Улучшенная версия

Уровень сложностиСложный
Время на прочтение9 мин
Количество просмотров4K

В статье Пример HTTP-сервера на PHP с использованием файберов / Хабр краеугольным камнем организации обработки HTTP-соединений является функция socket_select(), которая имеет значительное ограничение - максимальное значение дескриптора, которое можно добавить в любой из трёх аргументов данной функции составляет 1024. Данный лимит определяется константой FD_SETSIZE, для увеличения которой придётся сконфигурировать системные лимиты и как минимум пересобрать интерпретатор PHP, что нецелесообразно и может создать эксплуатационные проблемы. К тому же, производительность функции select(), обёрткой над которой является функция socket_select(), значительно проседает при ощутимом увеличении значения константы FD_SETSIZE. В данной статье я постараюсь продемонстрировать альтернативу, позволяющую избавить пример из предыдущей статьи от данного ограничения.

Читать далее

Клиентский код. Пространство имен

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.2K

Привет, Хабр!

У меня появилась необходимость отделить проект от фреймворка. Благо кода фреймворка в проекте было не так много, но избавиться от него тоже нужно.
Поэтому было принято решение переписать функционал который он покрывал.
Одной из используемых функций фреймворка было - построение пространства имен.

Пространство имен, проще говоря, создано что-бы задавать область видимости кода для другого кода. Используя пространство имен можно гарантировать что клиентский код не будет зависеть от названия: переменных, функций, класса, и всего чего угодно в коде, в том числе при подключении нескольких библиотек тоже можно не переживать. Клиентский код будет зависеть только от результата работы кода.

Удачно получилось что тема пересекается с моей статьей. Может если это будет серия статьей с пометкой Клиентский код, то мне получится лучше донести что же всё-таки это за код такой.

Читать далее

Пишем тесты для php backend приложений

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров4.3K

Статья нацелена в первую очередь на PHP backend-разработчиков уровня junior/middle, чтобы познакомить с теорией, которую спрашивают на собеседованиях, и с практическими примерами/советами, полезными для разработки.

Здесь хочу рассказать зачем вообще тестировать код, какие инструменты использовать, какие есть паттерны и тп.

Читать далее

Автоматизируем создание FormRequest в Laravel с помощью пакета desole/laravel-generate-request

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров781

Привет, Хабр! Сегодня я хочу рассказать о новом пакете для Laravel, который может значительно упростить вашу жизнь, если вы часто работаете с FormRequest классами. Пакет называется desole/laravel-generate-request, и он позволяет автоматически генерировать FormRequest классы на основе ваших моделей. Давайте разберем, как это работает и почему это может быть полезно.

Читать далее

Что умеет Rector: пишем кастомные правила для автоматизации рефакторинга PHP-проектов

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров2.8K

Привет, Хабр! Меня зовут Сережа Сахаров, я PHP-разработчик в Lamoda Tech. Одной из первых задач в компании для меня стал рефакторинг крупной части кодовой базы. Тогда я уже знал о Rector, но использовать его долгое время не доводилось. И в тот момент, что для решения моей задачи он хорошо подойдёт, если добавить еще несколько кастомных правил.
В процессе я получил интересный опыт, который выходит за рамки шаблонного применения инструмента, разобрался во внутреннем устройстве и механизмах работы, и хочу поделиться этим с PHP-сообществом. Если вам часто приходится сталкиваться с рефакторингом старых PHP-проектов, при этом их потребности выходят за пределы штатного набора правил, эта статья для вас.

Читать далее

Связывая Контексты: Руководство по Эффективному Взаимодействию

Уровень сложностиСложный
Время на прочтение26 мин
Количество просмотров1.8K

В предыдущей статье “Упакуйте свой код правильно” мы рассмотрели различные подходы к организации кода, включая монолитную и многослойную архитектуры, принципы чистой архитектуры, а также концепцию Bounded Context (ограниченного контекста) в Domain-Driven Design (DDD). Мы узнали, что Bounded Context помогает структурировать сложные системы, разделяя их на логические части, каждая из которых имеет собственную модель предметной области с четкими и непротиворечивыми правилами.

Теперь, когда мы понимаем, как выделять и организовывать bounded contexts, пришло время углубиться в следующий важный аспект DDD — коммуникацию между ними. В реальных системах bounded contexts редко существуют изолированно. Для реализации бизнес-процессов и обеспечения целостности системы необходимо организовать эффективное взаимодействие между ними. В этой статье мы рассмотрим, как bounded contexts могут общаться между собой, какие подходы к коммуникации существуют и как выбрать подходящий в зависимости от требований вашей системы. Продолжим наше путешествие в мир DDD, чтобы научиться создавать не только хорошо структурированные, но и слаженно работающие системы.

Читать далее

Очередное решение для разработки API и не только

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров2.3K

Возможно, вы не слышали о Sunrise экосистеме, так или иначе, сегодня я поделюсь опытом разработки API, используя Sunrise решения и не только.

Читать далее

Пошаговое руководство для начинающих по разработке SPA на Laravel и Vue.js

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров11K

Привет, Хабр. На связи Артем, Laravel-разработчик, и я написал инструкцию для начинающих разработчиков по созданию полноценного локального приложения с бэкендом на Laravel и фронтендом на Vue.js. 

Одностраничные приложения стали стандартом для создания динамичных и быстрых пользовательских интерфейсов. Одним из популярных стеков для разработки SPA является сочетание Laravel и Vue.js.

Пошагово разберу, как настроить среду разработки, создать API на Laravel, реализовать динамический интерфейс с использованием Vue.js и связать эти две части в единое приложение. 

После прочтения статьи вы сможете развернуть свое собственное SPA и использовать его как основу для реализации своих идей по функционалу. Этот пример станет отличной отправной точкой для создания более сложных проектов.

Читать далее

Как мы приручили рутину в 1C-Битрикс: автоматизация разработки CLI-командами

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров2.2K

Представьте: новый проект, сжатые сроки, десятки задач. Нужно создать компоненты, модули, классы, подготовить документацию — и всё это с нуля. Всё кажется стандартным, но на практике такие процессы забирают массу времени и сил.

Мы оказывались в этой ситуации не раз. Вместо того чтобы смириться с рутиной, решили действовать. Так появился наш набор CLI-команд для автоматизации разработки на 1C-Битрикс. Это не просто утилиты, а инструмент, который ускорил выполнение типичных задач, сделал процессы предсказуемыми и уменьшил вероятность ошибок.

Меня зовут Низамов Артур, я ведущий разработчик в НЛМК ИТ. Я расскажу, что нас мотивировало, какие команды мы добавили, как они работают и какой эффект это нам дало.

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

Читать далее

Клиентский код

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров19K

Привет, Хабр!

Вот варюсь я в этом айти уже долгое время. Почитываю Хабр, ищу работу, работаю, потом снова ищу работу. Посмотрел разные компании изнутри, крупные и не очень. Сходил за свою жизнь на 25+ собеседований, еще до времен удаленки и на на ней.

Я честно, не знаю как в других профессиях, но в программировании, как мне кажется, собеседования — это чистая лотерея. Мое видение этого возможно подтверждает рынок труда — накрути себе опыта побольше, примени нейросеть, расскажи красиво о себе и вот работа (зарплата) мечты уже твоя. Следствием этого — по 300 отзывов на вакансию. Но, к слову, вакансии эти висят месяцами. Ты просто попадаешь в огромную кучу кандидатов, которых работодатель хочет отсеять и выбрать лучшего из вас. По каким критериям (по всем кроме трудовой книжки) вас будут сортировать одному Нео известно. Так‑же имел личный опыт, когда я отвечал полностью на все вопросы в течение часа. Получив оценку своим знаниям на 5+, заветную работу (зарплату) мечты я так и не получил.

Читать далее

Мне вообще никто не нужен, сам себе погрею ужин. Самодостаточная Data

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров1.2K

Привет, на связи Лука.

Мне всегда было интересно узнать больше о чистой архитектуре и о том, как построить систему, которая будет простой, но при этом выполнять всё, что от неё требуется. Естественно, без ухода в крайности, результат — наше всё, в булочную на такси не поедем.

Со временем вырисовываются какие-то паттерны и принципы, к которым лежит душа. У каждого свои: кто-то горит TDD, кто-то ATDD, FDD, BDD и прочими DD. Я же больше всего прикипел к DDD, причём первая D тут варьируется: угораю как по Domain, так и по Data.

И что дальше?

Ближайшие события

Подключение и Настройка ElasticSearch в Laravel

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров2.8K

Elasticsearch - это мощный поисковый движок, который позволяет эффективно индексировать и искать данные. В этой статье мы рассмотрим, как интегрировать Elasticsearch в Laravel, используя Docker и PHP-библиотеку elasticsearch/elasticsearch.

Читать далее

Внедряем формулы как в Эксель

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров9.2K

Пользователи постоянно меняют логику подсчёта? Они не довольны скоростью с которой ты меняешь код? Тебя самого достало, так часто менять одно и тоже? Если да, то вот тебе решение: пускай пользователи сами пишут формулы на языке, который им более знаком: это формулы эксель. Тебе лишь надо научить своё приложение считать это. Как это сделать? С помощью чёрной магии конечно!

Читать далее

Практическое руководство по настройке CI/CD для PHP проектов

Уровень сложностиСредний
Время на прочтение31 мин
Количество просмотров11K

В этом лонгриде я расскажу немного теории о CI/CD, но в основном это будут практические примеры и советы, в первую очередь полезные для PHP backend разработчиков, однако некоторые инструменты подходят и для других языков, и вы можете уловить общую идею, как писать пайплайны

Читать далее

Паттерны «Банды четырех»: примеры применения в реальном проекте

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров15K

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

Будет много схем и кода, демонстрирующих практические примеры применения паттернов Композит, Билдер, Визитер, Цепочка обязанностей и Декоратор. Не смотря на то, что примеры кода написаны на PHP, статья может оказаться интересной и для разработчиков, использующих другие языки.

Читать далее

Laravel + тестирование: как сэкономить время на валидации запросов

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров749

При разработке API тестирование валидации входящих данных — рутинная задача. Чтобы упростить этот процесс, я создал пакет laravel-request-testdata, который автоматически генерирует тестовые данные на основе правил валидации Laravel Request.

Читать далее

Вход на сайт через Госуслуги на PHP

Время на прочтение2 мин
Количество просмотров5.2K

Снова коснусь темы, по которой на Хабре уже выходило несколько публикаций: интеграция с ЕСИА. Сначала будет несколько особенностей, которые раньше не были описаны, а в конце будет грустный вывод.

Читать далее

Интерпретатор выражений на php, без использования eval

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров1.9K

В нашем интернет-магазине возникла задача назначение скидок клиентам и их подсчета. Вернее, скидки мы уже считали давно и до этого, но сейчас бизнес пришёл с новой идеей, на которую наш скидочный движок рассчитан не был.

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

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

В общем, было решено писать интерпретатор выражений. Использование функции eval отмёл сразу, т. к. это такая потенциальная мина в безопасности, которую сам себе закладываешь. Моё субъективное мнение, что минусы от её использования перекрывают плюсы.

Читать далее