Объекты значений в PHP 8: сущности
В предыдущих статьях мы узнали, как создавать фундаментальные объекты ценности, и осознали их роль в повышении стабильности и надежности наших приложений.
В этой статье мы рассмотрим еще один архитектурный паттерн, тесно связанный с объектами ценности: Сущности.
https://dev.to/cnastasi/value-object-in-php-8-entities-1jce
👉 @php_lib
В предыдущих статьях мы узнали, как создавать фундаментальные объекты ценности, и осознали их роль в повышении стабильности и надежности наших приложений.
В этой статье мы рассмотрим еще один архитектурный паттерн, тесно связанный с объектами ценности: Сущности.
https://dev.to/cnastasi/value-object-in-php-8-entities-1jce
👉 @php_lib
👍4
Создание одностраничного приложения с помощью HTMX и Symfony
С появлением множества доступных сегодня Javascript-фреймворков веб-страницы стали более плавными и удобными с точки зрения пользовательского интерфейса, и Symfony тоже старается улучшить эту сферу с помощью таких инициатив, как Symfony UX.
Это прекрасно для пользователей, поскольку обеспечивает им беспроблемный и интуитивно понятный интерфейс, но это означает, что мы должны каждый день менять наш способ создания веб-сайтов, причем совершенно по-новому. Такие решения, как Symfony UX, начали появляться на свет, чтобы упростить разработку UX-ориентированных компонентов/сайтов. Мы уже рассказывали об этом конкретном инструменте в другой статье блога, и он отлично работает! Однако то, что мы используем Symfony, не делает его единственным вариантом!
Эта статья посвящена библиотеке, которая в последнее время набирает обороты в области библиотек, улучшающих UX, - htmx.
https://jolicode.com/blog/making-a-single-page-application-with-htmx-and-symfony
👉 @php_lib
С появлением множества доступных сегодня Javascript-фреймворков веб-страницы стали более плавными и удобными с точки зрения пользовательского интерфейса, и Symfony тоже старается улучшить эту сферу с помощью таких инициатив, как Symfony UX.
Это прекрасно для пользователей, поскольку обеспечивает им беспроблемный и интуитивно понятный интерфейс, но это означает, что мы должны каждый день менять наш способ создания веб-сайтов, причем совершенно по-новому. Такие решения, как Symfony UX, начали появляться на свет, чтобы упростить разработку UX-ориентированных компонентов/сайтов. Мы уже рассказывали об этом конкретном инструменте в другой статье блога, и он отлично работает! Однако то, что мы используем Symfony, не делает его единственным вариантом!
Эта статья посвящена библиотеке, которая в последнее время набирает обороты в области библиотек, улучшающих UX, - htmx.
https://jolicode.com/blog/making-a-single-page-application-with-htmx-and-symfony
👉 @php_lib
👍3
PHP Annotated – January 2024
Добро пожаловать в январский выпуск PHP Annotated! Мы расскажем о самых интересных событиях в PHP-сообществе за последний месяц, представив отобранные новости, статьи, инструменты и видео.
https://blog.jetbrains.com/phpstorm/2024/01/php-annotated-january-2024/
👉 @php_lib
Добро пожаловать в январский выпуск PHP Annotated! Мы расскажем о самых интересных событиях в PHP-сообществе за последний месяц, представив отобранные новости, статьи, инструменты и видео.
https://blog.jetbrains.com/phpstorm/2024/01/php-annotated-january-2024/
👉 @php_lib
👍4
Разработка расширения для PHP на C++. Хуки встроенных функций и методов
PHP - это мощный и широко используемый язык программирования для веб-разработки. Однако иногда требуется расширение функциональности или модификация стандартного поведения PHP с использованием более низкоуровневых языков, таких как C++. В этой статье мы рассмотрим, как создать расширение для PHP на C++ на примере разработки функциональности, позволяющей перехватывать вызовы встроенных функций и методов классов в php.
https://habr.com/ru/articles/779344/
👉 @php_lib
PHP - это мощный и широко используемый язык программирования для веб-разработки. Однако иногда требуется расширение функциональности или модификация стандартного поведения PHP с использованием более низкоуровневых языков, таких как C++. В этой статье мы рассмотрим, как создать расширение для PHP на C++ на примере разработки функциональности, позволяющей перехватывать вызовы встроенных функций и методов классов в php.
https://habr.com/ru/articles/779344/
👉 @php_lib
👍3
Genealogy
Бесплатное приложение с открытым исходным кодом (семейное дерево) для записи членов семьи и их взаимоотношений, созданное на PHP (Laravel 10).
https://github.com/MGeurts/genealogy
👉 @php_lib
Бесплатное приложение с открытым исходным кодом (семейное дерево) для записи членов семьи и их взаимоотношений, созданное на PHP (Laravel 10).
https://github.com/MGeurts/genealogy
👉 @php_lib
👍6
Модифицируйте таблицы и записи в режиме реального времени с помощью Laravel Population
Laravel Population - это пакет Laravel, предназначенный для управления миграциями и записями в базе данных. Он значительно упрощает процесс модификации таблиц, избавляя от необходимости создавать новые миграции и обработчики для этих изменений.
https://capsules.codes/en/blog/fyi/en-fyi-modify-tables-and-records-with-laravel-population
👉 @php_lib
Laravel Population - это пакет Laravel, предназначенный для управления миграциями и записями в базе данных. Он значительно упрощает процесс модификации таблиц, избавляя от необходимости создавать новые миграции и обработчики для этих изменений.
https://capsules.codes/en/blog/fyi/en-fyi-modify-tables-and-records-with-laravel-population
👉 @php_lib
👍1
🚨 Защитите свой код от Zip Bomb! 💣🚨
Защитите свои приложения от сильно сжатых Zip-файлов, предназначенных для DoS-атак
💡 проверка количества файлов в архиве
💡 проверьте общий размер несжатых данных
💡 проверьте степень сжатия
👉 @php_lib
Защитите свои приложения от сильно сжатых Zip-файлов, предназначенных для DoS-атак
💡 проверка количества файлов в архиве
💡 проверьте общий размер несжатых данных
💡 проверьте степень сжатия
👉 @php_lib
👍5
Совет по Laravel💡
Поддерживайте контроллеры, используя ТОЛЬКО 7 методов:
1️⃣ index
2️⃣ create
3️⃣ store
4️⃣ show
5️⃣ edit
6️⃣ update
7️⃣ destroy
Для любых дополнительных методов создайте другой контроллер и используйте эти методы.
👉 @php_lib
Поддерживайте контроллеры, используя ТОЛЬКО 7 методов:
1️⃣ index
2️⃣ create
3️⃣ store
4️⃣ show
5️⃣ edit
6️⃣ update
7️⃣ destroy
Для любых дополнительных методов создайте другой контроллер и используйте эти методы.
👉 @php_lib
🤔8👎5👍3
Serde
Это быстрая, гибкая, мощная и простая в использовании библиотека сериализации и десериализации для PHP, которая поддерживает ряд стандартных форматов. Она черпает вдохновение как в Rust's Serde crate, так и в Symfony Serializer, хотя напрямую не основана ни на одном из них.
На данный момент Serde поддерживает сериализацию PHP-объектов в массивы PHP, JSON, YAML и CSV-файлы и обратно. Он также поддерживает сериализацию в JSON или CSV через поток. Планируется дальнейшая поддержка, но по задумке она может быть расширена любым пользователем.
Установка
Использование
https://github.com/Crell/Serde
👉 @php_lib
Это быстрая, гибкая, мощная и простая в использовании библиотека сериализации и десериализации для PHP, которая поддерживает ряд стандартных форматов. Она черпает вдохновение как в Rust's Serde crate, так и в Symfony Serializer, хотя напрямую не основана ни на одном из них.
На данный момент Serde поддерживает сериализацию PHP-объектов в массивы PHP, JSON, YAML и CSV-файлы и обратно. Он также поддерживает сериализацию в JSON или CSV через поток. Планируется дальнейшая поддержка, но по задумке она может быть расширена любым пользователем.
Установка
$ composer require crell/serde
Использование
use Crell\Serde\SerdeCommon;
$serde = new SerdeCommon();
$object = new SomeClass();
// Populate $object somehow;
$jsonString = $serde->serialize($object, format: 'json');
$deserializedObject = $serde->deserialize($jsonString, from: 'json', to: SomeClass::class);
https://github.com/Crell/Serde
👉 @php_lib
GitHub
GitHub - Crell/Serde: Robust Serde (serialization/deserialization) library for PHP 8.
Robust Serde (serialization/deserialization) library for PHP 8. - Crell/Serde
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Автономный взлом веб-приложений PHP на уровне байткода
https://finixbit.github.io/posts/autonomous-Hacking-of-PHP-Web-Applications-at-the-Bytecode-Level/
👉 @php_lib
https://finixbit.github.io/posts/autonomous-Hacking-of-PHP-Web-Applications-at-the-Bytecode-Level/
👉 @php_lib
❤2👍1
Как выполнять команды Laravel Artisan с помощью Endpoint API
При развертывании приложений Laravel нам иногда необходимо выполнять команды на стороне сервера для таких задач, как миграция базы данных, очистка кэша или другие важные процессы.
Традиционный способ:
Откройте cPanel или любую другую панель управления, затем перейдите в терминал или зайдите в SSH напрямую, если у вас есть root-доступ,
Затем перейдите в папку с приложениями и запустите нужную команду.
Но эти шаги могут занять много времени.
https://dev.to/yasserelgammal/how-to-execute-laravel-artisan-commands-using-an-api-endpoint-3d49
👉 @php_lib
При развертывании приложений Laravel нам иногда необходимо выполнять команды на стороне сервера для таких задач, как миграция базы данных, очистка кэша или другие важные процессы.
Традиционный способ:
Откройте cPanel или любую другую панель управления, затем перейдите в терминал или зайдите в SSH напрямую, если у вас есть root-доступ,
Затем перейдите в папку с приложениями и запустите нужную команду.
Но эти шаги могут занять много времени.
https://dev.to/yasserelgammal/how-to-execute-laravel-artisan-commands-using-an-api-endpoint-3d49
👉 @php_lib
👍3
Механизмы безопасности в Laravel
Laravel - это веб-фреймворк на PHP с встроенной поддержкой практически всего, что нужно современным приложениям. Но мы не будем рассматривать все эти функции здесь. Вместо этого мы рассмотрим безопасные функции Laravel, которые могут помочь вам предотвратить болезненные ошибки.
Мы рассмотрим следующие механизмы безопасности:
Предотвращение N+1
Защита от частично гидрированных моделей
Опечатки атрибутов и переименованные столбцы
Защита от массового присвоения
Строгость модели
Принудительное выполнение полиморфного сопоставления
Мониторинг долгосрочных событий
https://habr.com/ru/articles/794348/
original https://planetscale.com/blog/laravels-safety-mechanisms
👉 @php_lib
Laravel - это веб-фреймворк на PHP с встроенной поддержкой практически всего, что нужно современным приложениям. Но мы не будем рассматривать все эти функции здесь. Вместо этого мы рассмотрим безопасные функции Laravel, которые могут помочь вам предотвратить болезненные ошибки.
Мы рассмотрим следующие механизмы безопасности:
Предотвращение N+1
Защита от частично гидрированных моделей
Опечатки атрибутов и переименованные столбцы
Защита от массового присвоения
Строгость модели
Принудительное выполнение полиморфного сопоставления
Мониторинг долгосрочных событий
https://habr.com/ru/articles/794348/
original https://planetscale.com/blog/laravels-safety-mechanisms
👉 @php_lib
👍5
Мой процесс написания пакетов для Laravel
https://dcblog.dev/my-process-for-writing-laravel-packages
👉 @php_lib
https://dcblog.dev/my-process-for-writing-laravel-packages
👉 @php_lib
👍4
Совет по Laravel 💡
Знаете ли вы, что... вы можете временно отключить
👉 @php_lib
Знаете ли вы, что... вы можете временно отключить
timestamps
при сохранении модели?👉 @php_lib
👍9
Практический пример декомпозиции монолитного PHP приложения
Стоит отметить, что сам по себе монолит не является антипаттерном и может отлично работать (и часто работает) при определенных условиях, обычно - когда он выбран осознанно. Но чаще всего монолитная архитектура в проекте не потому, что люди её выбрали, а потому что проект в неё естественно эволюционировал.
Прежде всего, давайте проясним, что мы имеем в виду под "декомпозицией монолита". Какая наша конечная цель? Какие могут быть бизнес-цели, побуждающие инженеров решать эту проблему?
https://habr.com/ru/articles/796223/
👉 @php_lib
Стоит отметить, что сам по себе монолит не является антипаттерном и может отлично работать (и часто работает) при определенных условиях, обычно - когда он выбран осознанно. Но чаще всего монолитная архитектура в проекте не потому, что люди её выбрали, а потому что проект в неё естественно эволюционировал.
Прежде всего, давайте проясним, что мы имеем в виду под "декомпозицией монолита". Какая наша конечная цель? Какие могут быть бизнес-цели, побуждающие инженеров решать эту проблему?
https://habr.com/ru/articles/796223/
👉 @php_lib
👍4
Ускорение сайта путём выявления проблемных участков кода: xDebug + phpStorm
Статья будет полезна джунам и миддлам кто разрабатывает сайты, кто занимается оптимизацией сайтов и кто хочет посмотреть на работу php кода "с высоты". Для себя из полезного можно узнать как связать вместе OpenServer, PhpStorm и xDebug. Один раз настраиваете и можно потом запросто делать отладку. И так, начнём.
https://habr.com/ru/articles/579434/
👉 @php_lib
Статья будет полезна джунам и миддлам кто разрабатывает сайты, кто занимается оптимизацией сайтов и кто хочет посмотреть на работу php кода "с высоты". Для себя из полезного можно узнать как связать вместе OpenServer, PhpStorm и xDebug. Один раз настраиваете и можно потом запросто делать отладку. И так, начнём.
https://habr.com/ru/articles/579434/
👉 @php_lib
👍6
Совет по Laravel 💡
Группировка контроллеров ресурсов с помощью метода "resources()" в Laravel - отличный способ сохранить ваши маршруты аккуратными и организованными, делая ваш код более чистым и поддерживаемым.
👉 @php_lib
Группировка контроллеров ресурсов с помощью метода "resources()" в Laravel - отличный способ сохранить ваши маршруты аккуратными и организованными, делая ваш код более чистым и поддерживаемым.
👉 @php_lib
👍4👎2
Как реализовать простую очередь в Symfony
Symfony - это популярный PHP-фреймворк, который предоставляет множество функций и компонентов для создания веб-приложений. Одним из таких компонентов является компонент Messenger, который позволяет отправлять и получать сообщения между различными частями вашего приложения или между различными приложениями. В этой статье мы рассмотрим, как использовать компонент Messenger для реализации простой системы очередей, используя Redis в качестве транспортного уровня.
1️⃣Установка необходимых пакетов: Используйте Composer для установки компонента Symfony Messenger и адаптера Redis.
2️⃣Настройка транспорта: Настройте подключение к серверу Redis в файле .env, указав расположение сервера и желаемое имя очереди.
3️⃣Создание сообщения и обработчика: Используйте команды Symfony console для создания классов сообщения и соответствующего обработчика. Эти классы представляют данные для отправки и логику, которая будет выполнена при получении сообщения.
4️⃣Маршрутизация сообщения к транспорту: Настройте компонент Messenger для связывания класса сообщения с желаемым транспортом в файле messenger.yaml.
5️⃣Отправка сообщения: Используйте службу MessageBusInterface для отправки сообщений из различных частей приложения, таких как контроллеры или службы.
6️⃣Получение сообщения: Используйте команду messenger:consume, чтобы запустить рабочий процесс, прослушивающий указанный транспорт и выполняющий соответствующий обработчик. Можно запускать несколько рабочих процессов параллельно для увеличения пропускной способности.
https://dev.to/daniyaljavani/how-to-implement-a-simple-queue-in-symfony-530a
👉 @php_lib
Symfony - это популярный PHP-фреймворк, который предоставляет множество функций и компонентов для создания веб-приложений. Одним из таких компонентов является компонент Messenger, который позволяет отправлять и получать сообщения между различными частями вашего приложения или между различными приложениями. В этой статье мы рассмотрим, как использовать компонент Messenger для реализации простой системы очередей, используя Redis в качестве транспортного уровня.
1️⃣Установка необходимых пакетов: Используйте Composer для установки компонента Symfony Messenger и адаптера Redis.
2️⃣Настройка транспорта: Настройте подключение к серверу Redis в файле .env, указав расположение сервера и желаемое имя очереди.
3️⃣Создание сообщения и обработчика: Используйте команды Symfony console для создания классов сообщения и соответствующего обработчика. Эти классы представляют данные для отправки и логику, которая будет выполнена при получении сообщения.
4️⃣Маршрутизация сообщения к транспорту: Настройте компонент Messenger для связывания класса сообщения с желаемым транспортом в файле messenger.yaml.
5️⃣Отправка сообщения: Используйте службу MessageBusInterface для отправки сообщений из различных частей приложения, таких как контроллеры или службы.
6️⃣Получение сообщения: Используйте команду messenger:consume, чтобы запустить рабочий процесс, прослушивающий указанный транспорт и выполняющий соответствующий обработчик. Можно запускать несколько рабочих процессов параллельно для увеличения пропускной способности.
https://dev.to/daniyaljavani/how-to-implement-a-simple-queue-in-symfony-530a
👉 @php_lib
👍3