array_find() в PHP 8.4
В продолжение вчерашней темы с предстоящим релизом PHP 8.4, здесь подробно описаны новые функции для работы с массивами
В продолжение вчерашней темы с предстоящим релизом PHP 8.4, здесь подробно описаны новые функции для работы с массивами
👍10🔥5
Простой пример использования Symfony Messenger
Статья рассказывает об использовании компонента Symfony Messenger для выполнения асинхронных и многопоточных задач на PHP вне контекста Symfony framework. Автор делится своим опытом и примером, использующим SQLite и Doctrine для хранения очереди сообщений, чтобы упростить обучение. Он описывает, как запустить и остановить Worker, а также как решить проблему остановки Worker с помощью StopWorkerOnRestartSignalListener.
Статья рассказывает об использовании компонента Symfony Messenger для выполнения асинхронных и многопоточных задач на PHP вне контекста Symfony framework. Автор делится своим опытом и примером, использующим SQLite и Doctrine для хранения очереди сообщений, чтобы упростить обучение. Он описывает, как запустить и остановить Worker, а также как решить проблему остановки Worker с помощью StopWorkerOnRestartSignalListener.
Хабр
Простой пример использования Symfony Messenger
И снова о Symfony Messenger... Пришёл и мой черёд асинхронно и многопоточно средствами PHP кое-что пообрабатывать… И я, естественно, вспомнил про компонент Messenger фреймворка Symfony. О...
👍6
tempest/highlight
Быстрая, масштабируемая, серверная подсветка кода для веб и терминала. Видео-интро.
Быстрая, масштабируемая, серверная подсветка кода для веб и терминала. Видео-интро.
GitHub
GitHub - tempestphp/highlight: 🎨 Fast, extensible, server-side code highlighting for web and terminal
🎨 Fast, extensible, server-side code highlighting for web and terminal - tempestphp/highlight
👍3❤1🥰1🎉1
Как использовать кэширование в Laravel?
Кэширование в Laravel — это мощная функция, которая может значительно улучшить производительность вашего веб-приложения за счет хранения часто используемых данных в кэше.
1. Конфигурация: Сначала убедитесь, что ваше приложение Laravel правильно настроено для кэширования. Файл конфигурации находится в config/cache.php, где вы можете указать драйвер кэша по умолчанию и другие параметры. Laravel поддерживает различные драйверы кэша, такие как file, database, redis, memcached и другие.
2. Хранение данных в кэше: Вы можете хранить данные в кэше, используя фасад Cache или вспомогательную функцию cache(). Например, чтобы сохранить значение в кэше на 10 минут, вы можете использовать:
Cache::put('key', 'value', 600);
3. Извлечение данных из кэша: Чтобы получить данные из кэша, вы можете использовать метод get:
$value = Cache::get('key');
// или используя вспомогательную функцию
$value = cache('key');
4. Проверка наличия данных: Перед извлечением данных вы можете проверить, существуют ли они в кэше:
Cache::has('key')
5. Удаление данных из кэша: Чтобы удалить данные из кэша, используйте метод forget:
Cache::forget('key');
6. Очистка всего кэша: Если вам нужно очистить весь кэш, вы можете использовать метод flush:
Cache::flush();
#вопросы_с_собеседований
Кэширование в Laravel — это мощная функция, которая может значительно улучшить производительность вашего веб-приложения за счет хранения часто используемых данных в кэше.
1. Конфигурация: Сначала убедитесь, что ваше приложение Laravel правильно настроено для кэширования. Файл конфигурации находится в config/cache.php, где вы можете указать драйвер кэша по умолчанию и другие параметры. Laravel поддерживает различные драйверы кэша, такие как file, database, redis, memcached и другие.
2. Хранение данных в кэше: Вы можете хранить данные в кэше, используя фасад Cache или вспомогательную функцию cache(). Например, чтобы сохранить значение в кэше на 10 минут, вы можете использовать:
Cache::put('key', 'value', 600);
3. Извлечение данных из кэша: Чтобы получить данные из кэша, вы можете использовать метод get:
$value = Cache::get('key');
// или используя вспомогательную функцию
$value = cache('key');
4. Проверка наличия данных: Перед извлечением данных вы можете проверить, существуют ли они в кэше:
Cache::has('key')
5. Удаление данных из кэша: Чтобы удалить данные из кэша, используйте метод forget:
Cache::forget('key');
6. Очистка всего кэша: Если вам нужно очистить весь кэш, вы можете использовать метод flush:
Cache::flush();
#вопросы_с_собеседований
👍12🥱4
Настройка Laravel с помощью дополнительных файлов окружения
Laravel теперь поддерживает использование нескольких .env-файлов, что позволяет разработчикам лучше управлять настройками для различных сред или условий.
Примеры использования:
Здесь приводятся примеры, как можно использовать дополнительные .env-файлы для различных целей, таких как разделение конфигураций для разных стадий разработки (например, .env.testing, .env.production).
Приоритет загрузки:
Laravel загружает переменные из основного .env-файла, но если существуют дополнительные .env-файлы, они могут переопределять значения из основного файла. Это даёт гибкость в настройках, позволяя использовать разные конфигурации в зависимости от нужд.
Laravel теперь поддерживает использование нескольких .env-файлов, что позволяет разработчикам лучше управлять настройками для различных сред или условий.
Примеры использования:
Здесь приводятся примеры, как можно использовать дополнительные .env-файлы для различных целей, таких как разделение конфигураций для разных стадий разработки (например, .env.testing, .env.production).
Приоритет загрузки:
Laravel загружает переменные из основного .env-файла, но если существуют дополнительные .env-файлы, они могут переопределять значения из основного файла. Это даёт гибкость в настройках, позволяя использовать разные конфигурации в зависимости от нужд.
Laravel News
Configuring Laravel With Additional Environment Files - Laravel News
In Laravel, you can configure additional environment files that will load instead of the `.env` file. Let's look at how to do this, with some practical examples like using an '.env.testing' env file.
🔥6👍2
Путь к DRY валидации в Laravel
В статье рассказывается о том, как один человек решил сократить дублирование кода при написании правил валидации с помощью принципа DRY (Don't Repeat Yourself). Он искал удобное решение, которое удовлетворяло бы нескольким основным требованиям:
1. Имело бы удобный интерфейс.
2. Позволяло бы при необходимости редактировать или переписывать правила валидации для полей.
3. Давало бы возможность добавлять дополнительные поля «на месте».
4. Использовало бы только строковые значения в качестве имен полей, при этом имена не могли бы содержать точки, так как они нужны для разделения уровней вложенности.
5. Некоторые поля группировались по сущностям базы данных, а некоторые существовали отдельно.
Для реализации этого решения использовался существующий механизм хелперов в Laravel. Было решено создать функцию get_validation_rules, которая бы принимала два параметра: массив с именами полей и ассоциативный массив с дополнительными правилами для этих полей.
Эта функция берет глобальные правила из конфигурационного файла Laravel и на их основе формирует итоговый массив правил для указанных полей. Если для поля указаны дополнительные правила, они добавляются к существующим правилам.
Таким образом, герой статьи смог создать удобный механизм для управления правилами валидации, минимизировав дублирование кода и упростив поддержку этих правил в будущем.
В статье рассказывается о том, как один человек решил сократить дублирование кода при написании правил валидации с помощью принципа DRY (Don't Repeat Yourself). Он искал удобное решение, которое удовлетворяло бы нескольким основным требованиям:
1. Имело бы удобный интерфейс.
2. Позволяло бы при необходимости редактировать или переписывать правила валидации для полей.
3. Давало бы возможность добавлять дополнительные поля «на месте».
4. Использовало бы только строковые значения в качестве имен полей, при этом имена не могли бы содержать точки, так как они нужны для разделения уровней вложенности.
5. Некоторые поля группировались по сущностям базы данных, а некоторые существовали отдельно.
Для реализации этого решения использовался существующий механизм хелперов в Laravel. Было решено создать функцию get_validation_rules, которая бы принимала два параметра: массив с именами полей и ассоциативный массив с дополнительными правилами для этих полей.
Эта функция берет глобальные правила из конфигурационного файла Laravel и на их основе формирует итоговый массив правил для указанных полей. Если для поля указаны дополнительные правила, они добавляются к существующим правилам.
Таким образом, герой статьи смог создать удобный механизм для управления правилами валидации, минимизировав дублирование кода и упростив поддержку этих правил в будущем.
🥱10👍8🌚1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
❤1
Существует такой Bash-скрипт phloc, который упрощает запуск локального PHP-сервера для тестирования и разработки. Он позволяет указать номер порта и корневую директорию. Если параметры не заданы, по умолчанию используется порт 8080 и текущая директория. Скрипт проверяет, занят ли порт, и при необходимости увеличивает его номер. Это экономит время и автоматически управляет конфликтами портов. Инструкции по использованию включают сохранение, предоставление прав на выполнение и запуск скрипта.
DEV Community
Simplify Your PHP Development with a Handy Bash Script
As developers, we often need to quickly spin up a local PHP server for testing and development...
😁12👍3🤔3
👍4🔥3🤔2
Как рефакторить метод с необязательными параметрами
Здесь обсуждается проблема, связанную с методами, имеющими необязательные параметры, которые могут вызывать неожиданные побочные эффекты. В качестве примера приводится класс PageRepository с методами find и findOrFail, у которых параметр $prerender имеет разные значения по умолчанию. Это может привести к ненамеренной предварительной отрисовке страницы, что является дорогостоящей операцией.
Пример проблемы:
Класс PageRepository содержит два метода:
find($pageId, $prerender = false), который по умолчанию не выполняет предварительную отрисовку.
findOrFail($pageId, $prerender = true), который по умолчанию выполняет предварительную отрисовку.
Возможные решения:
🟢Установить одинаковые значения по умолчанию для параметра $prerender.
🟢Явно указывать значение параметра.
🟢Разделить метод с флагом параметра на два отдельных метода. Это потребует от разработчика явного выбора функциональности, предотвращая ненамеренные побочные эффекты.
Здесь обсуждается проблема, связанную с методами, имеющими необязательные параметры, которые могут вызывать неожиданные побочные эффекты. В качестве примера приводится класс PageRepository с методами find и findOrFail, у которых параметр $prerender имеет разные значения по умолчанию. Это может привести к ненамеренной предварительной отрисовке страницы, что является дорогостоящей операцией.
Пример проблемы:
Класс PageRepository содержит два метода:
find($pageId, $prerender = false), который по умолчанию не выполняет предварительную отрисовку.
findOrFail($pageId, $prerender = true), который по умолчанию выполняет предварительную отрисовку.
Возможные решения:
🟢Установить одинаковые значения по умолчанию для параметра $prerender.
🟢Явно указывать значение параметра.
🟢Разделить метод с флагом параметра на два отдельных метода. Это потребует от разработчика явного выбора функциональности, предотвращая ненамеренные побочные эффекты.
Lukapeharda
How to Refactor a Method With Optional Params - Luka Peharda - PHP and JS developer
While refactoring and optimising legacy code I've ran into a method signature inconsistency which caused performance issues and was being done without developer intention.
👍2❤1
Forwarded from Библиотека собеса по PHP | вопросы с собеседований
Расскажите про сериализатор Symfony
В Symfony, сериализатор — это сервис, который преобразует данные между различными форматами, такими как JSON, XML, YAML или CSV, и PHP-объектами. Компонент сериализации в Symfony — это мощный инструмент, используемый для преобразования объектов в сериализуемый формат и обратно. Он особенно полезен для API, где обмен данными часто требует преобразования в структурированные текстовые форматы и обратно.
Нормализаторы и кодировщики
Нормализаторы: Отвечают за преобразование объектов в массивы и обратно:
✔️ObjectNormalizer: Преобразует объекты в массивы и обратно.
✔️ArrayDenormalizer: Обрабатывает массивы объектов.
✔️DateTimeNormalizer: Обрабатывает объекты DateTime.
Кодировщики: Отвечают за преобразование массивов в определенные форматы и обратно:
✔️JsonEncoder: Обрабатывает кодирование/декодирование JSON.
✔️XmlEncoder: Обрабатывает кодирование/декодирование XML.
✔️YamlEncoder: Обрабатывает кодирование/декодирование YAML.
✔️CsvEncoder: Обрабатывает кодирование/декодирование CSV.
В Symfony, сериализатор — это сервис, который преобразует данные между различными форматами, такими как JSON, XML, YAML или CSV, и PHP-объектами. Компонент сериализации в Symfony — это мощный инструмент, используемый для преобразования объектов в сериализуемый формат и обратно. Он особенно полезен для API, где обмен данными часто требует преобразования в структурированные текстовые форматы и обратно.
Нормализаторы и кодировщики
Нормализаторы: Отвечают за преобразование объектов в массивы и обратно:
✔️ObjectNormalizer: Преобразует объекты в массивы и обратно.
✔️ArrayDenormalizer: Обрабатывает массивы объектов.
✔️DateTimeNormalizer: Обрабатывает объекты DateTime.
Кодировщики: Отвечают за преобразование массивов в определенные форматы и обратно:
✔️JsonEncoder: Обрабатывает кодирование/декодирование JSON.
✔️XmlEncoder: Обрабатывает кодирование/декодирование XML.
✔️YamlEncoder: Обрабатывает кодирование/декодирование YAML.
✔️CsvEncoder: Обрабатывает кодирование/декодирование CSV.
👍13🔥1
Foxy
это плагин Composer для автоматизации проверки, установки, обновления и удаления зависимостей PHP-библиотек (javaScript, таблиц стилей и т.д.), определенных в файле NPM package.json проекта и PHP-библиотек во время выполнения Composer. Он восстанавливает состояние проекта в случае, если Bun или NPM или Yarn или PNpM завершается с ошибкой.
это плагин Composer для автоматизации проверки, установки, обновления и удаления зависимостей PHP-библиотек (javaScript, таблиц стилей и т.д.), определенных в файле NPM package.json проекта и PHP-библиотек во время выполнения Composer. Он восстанавливает состояние проекта в случае, если Bun или NPM или Yarn или PNpM завершается с ошибкой.
GitHub
GitHub - php-forge/foxy: A fast, reliable, and secure BUN/NPM/Yarn/PNpM bridge for Composer.
A fast, reliable, and secure BUN/NPM/Yarn/PNpM bridge for Composer. - php-forge/foxy
👍3
Иногда нам нужно сгенерировать случайное число, например, для отправки пользователю через SMS💬 для авторизации с помощью SMS. Для этого мы можем использовать функцию rand(000000, 999999), которая пришлет пользователю шестизначный код для верификации. Также с помощью функции в Laravel мы можем усложнить задачу и отправить случайные символы с помощью Str::random(). Эта функция по умолчанию отправляет 16 символов, но мы также можем сократить их до 8 с помощью Str::random(8).
❗Однако, важно отметить, что для безопасности передачи данных важно использовать криптографически устойчивые методы генерации случайных чисел и символов, в частности, с помощью функций, которые используют устойчивые алгоритмы шифрования.
❗Однако, важно отметить, что для безопасности передачи данных важно использовать криптографически устойчивые методы генерации случайных чисел и символов, в частности, с помощью функций, которые используют устойчивые алгоритмы шифрования.
😁7👍4👾1
Сколько лет стажа нужно разработчику, чтобы он мог назваться Сеньором?
Anonymous Poll
14%
от 10 лет
43%
Минимум 5-10
30%
3-5 лет
6%
2-3 года
8%
Свой вариант
👍3❤2
Избегание импортов и алиасов в PHP
В PHP важно правильно управлять зависимостями и пространствами имен, чтобы поддерживать чистый и читаемый код. Использование операторов use и псевдонимов может привести к засорению кода и его неоднозначности. Вот несколько стратегий для избегания чрезмерного использования импортов и псевдонимов:
🟢Автозагрузка с PSR-4: Настройка автозагрузки по стандарту PSR-4 позволяет автоматически загружать классы на основе их пространства имен и структуры директорий, уменьшая необходимость ручного импорта.
🟢Полные имена классов (FQCN): Используйте полные имена классов напрямую в коде, чтобы избежать импорта и сделать использование классов явным.
🟢Внедрение зависимостей: Передавайте зависимости через конструкторы классов, что улучшает тестируемость и снижает необходимость импорта.
🟢Паттерн локатор сервисов: Используйте локатор сервисов для управления зависимостями, чтобы централизовать создание и хранение сервисов.
🟢Группировка операторов use: Сгруппируйте несколько классов из одного пространства имен в одном операторе use для уменьшения засорения.
🟢Избегайте псевдонимов, если это не необходимо: Используйте описательные имена классов и избегайте их сокращения, если это не улучшает читаемость кода.
В PHP важно правильно управлять зависимостями и пространствами имен, чтобы поддерживать чистый и читаемый код. Использование операторов use и псевдонимов может привести к засорению кода и его неоднозначности. Вот несколько стратегий для избегания чрезмерного использования импортов и псевдонимов:
🟢Автозагрузка с PSR-4: Настройка автозагрузки по стандарту PSR-4 позволяет автоматически загружать классы на основе их пространства имен и структуры директорий, уменьшая необходимость ручного импорта.
🟢Полные имена классов (FQCN): Используйте полные имена классов напрямую в коде, чтобы избежать импорта и сделать использование классов явным.
🟢Внедрение зависимостей: Передавайте зависимости через конструкторы классов, что улучшает тестируемость и снижает необходимость импорта.
🟢Паттерн локатор сервисов: Используйте локатор сервисов для управления зависимостями, чтобы централизовать создание и хранение сервисов.
🟢Группировка операторов use: Сгруппируйте несколько классов из одного пространства имен в одном операторе use для уменьшения засорения.
🟢Избегайте псевдонимов, если это не необходимо: Используйте описательные имена классов и избегайте их сокращения, если это не улучшает читаемость кода.
😁8🌚8👍7👾2
Forwarded from Proglib.academy | IT-курсы
Программистам без практики никуда. Поэтому время прокачать навыки: решение задач — хороший способ развить навыки разработки.
Вам под силу эти задачи?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4