Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.34K photos
20 videos
26 files
4.03K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
🔍Здесь рассматривается проблема типизации в приложениях, использующих Query Bus. Query Bus — это шаблон проектирования, который позволяет обрабатывать запросы и возвращать результаты. Проблема заключается в том, что возвращаемый тип данных из Query Bus неопределен, что затрудняет типизацию в приложении.

🔧Для решения этой проблемы автор предлагает использовать дженерики. Они позволяют связывать тип возвращаемого значения Query с типом, который возвращает соответствующий QueryHandler. Таким образом, он предлагает определить интерфейс Query как generic, указав переменный тип T.

Затем типизируется интерфейс QueryBus, указывая, что он принимает объекты типа Query и возвращает объекты типа T. Это позволяет явно указать тип возвращаемого значения из Query Bus.

🔑Наконец, показывается пример конкретного запроса, который также типизируется с использованием generics. Это позволяет автоматически определять тип возвращаемого значения из Query Bus в среде разработки, такой как PHPStorm, облегчая работу с кодом.
👍11🥱4
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Новое в Symfony 6.4: Профилировщик команд и CHIPS сookie

🔎Здесь рассказывается о значительном улучшении Symfony Profiler, одной из любимых функций разработчиков Symfony. Профилировщик собирает всю информацию о HTTP-запросах, позволяя анализировать эти данные при поиске ошибок. В Symfony 6.4 (и 7.0) профилировщик был улучшен таким образом, что теперь он также может профилировать команды, выполняемые в консоли.

👨‍💻Эта статья объясняет изменения в поддержке сторонних куки в веб-браузерах, начиная с середины 2024 года. Она представляет новую альтернативу под названием CHIPS (Cookies Having Independent Partitioned State), предлагая детали об использовании атрибута Partitioned в HTTP-заголовке Set-Cookie. Этот атрибут Partitioned позволяет хранить куки с использованием двух ключей: ключа хоста (host key) и нового ключа разделения (partition key). Такой подход предотвращает доступ к кукам между различными ресурсами, встроенными в один и тот же сайт, что обеспечивает большую конфиденциальность данных пользователей.
👍7
Как вы понимаете Special Case / Null Object и где его следует применять?

Special Case / Null Object — это шаблон проектирования, который используется для обработки специальных случаев или значений отсутствия объекта. Он позволяет разработчику избежать проверок на null и обрабатывать такое отсутствие объекта по-особенному.

Null Object — это класс, который реализует интерфейс или абстрактный класс, используемый вместо null. Он предоставляет реализацию методов, которые обрабатываются для отсутствующего объекта, и возвращает пустые значения или выполняет пустые действия.

Null Object можно применять, когда требуется обработать отсутствие объекта без использования проверок на null. Он может быть полезен в таких ситуациях:

1. Вместо проверки на null, можно использовать Null Object, чтобы избежать возникновения исключений или ошибок, связанных с отсутствием объекта и его методов.

2. Null Object может упростить код и избавить от необходимости писать дополнительные условия для обработки null значений.

3. Он также может быть полезен в шаблонном методе, когда необходимо иметь базовую реализацию методов, которые могут быть переопределены в подклассах, и одновременно обрабатывать отсутствие объекта.

В этом примере, если использовать NullLogger, то метод log не выполняет никаких действий и не вызывает ошибок при отсутствии файла или других ресурсов, которые могут быть связаны с реальным логгером.

#вопросы_с_собеседований
👍12
FrankenPHP

FrankenPHP — это современный сервер приложений для PHP, построенный на базе веб-сервера Caddy .

FrankenPHP дает новые возможности вашим приложениям

FrankenPHP работает с любым PHP-приложением и делает ваши проекты Symfony быстрее, чем когда-либо, благодаря интеграции с рабочим режимом (появляется поддержка Laravel Octane).

FrankenPHP также можно использовать как отдельную библиотеку Go для встраивания PHP в любое приложение, использующее net/http.
🥱8👍61🌚1
Что такое гексагональная архитектура. Разделение бизнес-логики и инфраструктуры с помощью портов и адаптеров

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

🔎Здесь рассматривается гексагональная архитектура — инновационный подход, предложенный Алистером Кокберном, который переворачивает традиционное представление о структуре приложений.

Этот подход позволяет разрабатывать и тестировать приложения в изоляции, не завися от внешних технологий, и обеспечивает гибкость и легкость в поддержке.
👍5
Какую диагональ монитора чаще всего используете на работе?
⬇️⬇️⬇️⬇️
🥱2💯1
Новое в Symfony 6.4: маршруты на основе FQCN и Обработчик подпроцесса

Первая статья представляет новую возможность автоматического именования маршрутов в Symfony при использовании контроллеров. Теперь разработчики могут определять уникальные имена маршрутов на основе FQCN (полного имени класса) контроллера и имени метода. Это снижает вероятность ошибок и делает код более читаемым, избегая использования «магических строк» для определения имен маршрутов.

Вторая статья представляет новый класс PhpSubprocess в Symfony 6.4, который решает проблему передачи конфигурационных настроек от родительского процесса к подпроцессам в PHP. Это обеспечивает надежность и предсказуемость работы с подпроцессами, такими как консольные команды, унаследовав конфигурацию от родительского процесса.
👍9
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🎙️ТОП-14 подкастов о карьере в ИТ

Делимся подкастами, которые помогут вам подготовиться к собеседованиям и лучше понять, как устроен процесс найма в ИТ. Ниже — небольшая подборка, остальные читайте в статье.

👉 NEWHR и СОБЕС — два подкаста от Киры Кузьменко, рекрутера с 20-летним опытом
👉 Хочу в айти — подкаст для новичков, в котором не так много выпусков, но они короткие, ёмкие и интересные.
👉 Выхожу с понедельника — подкаст про разные направления в ИТ
👉 Moscow Python — подкаст о карьере, личном опыте и не только
👉 Podlodka Podcast — популярный подкаст с очень разнообразными и интересными темами, связанными с карьерой в ИТ и другими айтишными направлениями

#подкасты
👍3
А был ли баг? Может бага и не было? Зачем, как и чем тестировать PHP код

В статье рассматриваются основные подходы к тестированию бэкенда на PHP, обсуждаются преимущества и проблемы, связанные с этим процессом. Также о методах обнаружения и устранения багов, инструментах и книгах для более глубокого изучения тестирования. Материал будет полезен как начинающим тестировщикам, так и разработчикам, которые хотят освоить тестирование бэкенда, но не знают с чего начать.
👍4🥱4
Resonance — новый PHP-фреймворк, созданный на основе Swoole

Здесь представлен новый PHP-фреймворк под названием Resonance, который ориентирован на асинхронное программирование и включает в себя функции Fibers, Coroutines и библиотеку Swoole. Фреймворк позволяет создавать модульные приложения, где все компоненты могут легко заменяться, расширяться или модифицироваться. Проект бесплатный и open source, с документацией и исходным кодом доступными на GitHub. Автор приглашает присоединиться к сообществу и оценить проект на GitHub.
👍125👾1
Борьба с Login CSRF

Статья обсуждает уязвимости Cross-Site Request Forgery (CSRF) в веб-приложениях, фокусируясь на менее известном типе — Login CSRF. CSRF эксплуатирует функционал сеансов в браузере, позволяя злоумышленникам выполнять неавторизованные запросы с использованием сеанса пользователя. В традиционной атаке CSRF злоумышленник может манипулировать пользователем для выполнения действий от их имени, таких как изменение пароля или проведение транзакций.

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

Автор предоставляет рекомендации по защите от Login CSRF в Symfony, фреймворке веб-приложений. Рекомендуемый подход включает в себя включение защиты CSRF в конфигурации аутентификации и внедрение случайного токена в форму входа, который может быть автоматизирован аутентификатором form_login Symfony. Для более старых версий Symfony предлагается использовать csrf_token_generator.

Защита распространяется также на выход, с использованием опции enable_csrf в конфигурации logout. Статья завершается акцентом на важности обеспечения защиты действий входа и выхода от атак CSRF, даже при наличии улучшенных мер безопасности куки.
🥱8👍61
Что такое ACID?

ACID — это аббревиатура, обозначающая четыре основных характеристики транзакций в базах данных: атомарность (Atomicity), согласованность (Consistency), изолированность (Isolation) и долговечность (Durability).

1. Атомарность обеспечивает полную или ничего не делающую выполнение транзакции. Транзакция считается атомарной, если она выполняется как единое целое, и либо все ее операции будут успешно выполнены, либо ни одна.

2. Согласованность гарантирует, что после успешного завершения транзакции база данных находится в согласованном состоянии. Это означает, что интегритет данных должен быть сохранен, а все ограничения и правила, определенные на уровне базы данных, должны быть соблюдены.

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

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

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

#вопросы_с_собеседований
👍8🥱5💯1
Декодинг функций пустых значений PHP: когда какие использовать

Эта статья объясняет различия между оператором ! (не), функцией is_null(), isset() и функцией empty() в PHP при проверке наличия пустых значений. Вот краткое изложение ключевых моментов:

1️⃣Оператор ! (не):

Проверяет, является ли значение false.
Считаются «ложными» значениями: false, 0, 0.0, '', массив с нулевым количеством элементов, NULL, объекты SimpleXML из пустых тегов.
Пример: if (!$value) { echo 'Значение считается пустым.'; }

2️⃣Функция is_null():

Проверяет, равна ли переменная NULL.
Возвращает true только если переменная именно NULL, не проверяя другие «пустые» значения.
Пример: if (is_null($value)) { echo 'Значение равно NULL.'; }

3️⃣Функция isset():

Проверяет, установлена ли переменная и не является ли она NULL.
Возвращает true для любого значения, отличного от NULL (включая false, 0, и пустую строку '').
Пример: if (isset($value)) { echo 'Переменная установлена и не равна NULL.'; }

4️⃣Функция empty():

Проверяет, считается ли переменная «пустой».
Считаются «пустыми» значения: '', 0, 0.0, «0», NULL, false, массив с нулевым количеством элементов.
Полезна при проверке наличия переменной и её непустого значения.
Пример: if (empty($value)) { echo 'Значение считается пустым по empty().'; }
Статья также предоставляет примеры использования каждой из функций для лучшего понимания их применения.
🔥9👍4🥱2👾1
Построение гибкой, но абстрактной структуры внешней интеграции

В статье описан процесс разработки интеграции Jira в приложение Flare, которое уже имело интеграцию с GitHub. Основное внимание уделяется созданию гибкой и абстрактной структуры, позволяющей легко добавлять новые интеграции в будущем и приводится три примера абстрагирования кода для различных интеграций.
👍6👾2
8 способов, с помощью которых Laravel поможет вам писать чистый и лаконичный код

В статье рассматриваются восемь методов, которые позволяют писать более компактный и чистый код в Laravel:

1️⃣Фасады (Facades):

Фасады предоставляют «статический» интерфейс к классам, доступным в контейнере служб приложения.
Позволяют обращаться к функционалу Laravel через интуитивно понятный синтаксис, например, Cache::get('foo').

2️⃣Неявное связывание (Implicit Binding):

Позволяет автоматически получать ресурсы из базы данных, указывая модель вместо явного запроса.
Пример: Route::get('/blog/{post}', [PostController::class, 'show']), где $post — это экземпляр модели Post.

3️⃣Автоматическое внедрение зависимостей:

Laravel может автоматически внедрять зависимости, например, объект запроса.
Просто указываем в методе контроллера store(Request $request), и Laravel предоставляет экземпляр запроса.

4️⃣Перенаправление маршрутов (Redirect Routes):

Использование метода Route::redirect('/old', '/new') для перенаправления существующих URL без создания целого контроллера.

5️⃣Просмотр маршрутов (View Routes):

Использование метода Route::view('/about', 'pages.about') для простой регистрации маршрута, возвращающего представление.

6️⃣Коллекции (Collections):

Laravel Collections предоставляют множество полезных методов для работы с массивами более эффективным и последовательным образом.

7️⃣Условный трейт (Conditional Trait):

Использование трейта Conditionable для более компактного и читаемого кода при условных проверках.

8️⃣Бесконечные пакеты первой стороны (Endless First Party Packages):

Использование обширной коллекции официальных и сторонних пакетов Laravel для решения распространенных задач.
9😁6🥱1
#дайджест #phpdevjob

Вакансии недели для Москвы 👨🏻‍🏫

Senior PHP разработчик в Торговая компания
Москва. Высоконагруженный маркетплейс.
Подробнее

Программист в Университет искусственного интеллекта
Москва. Образование в сфере AI.
Подробнее

Senior PHP-разработчик в EdgeQ
Москва. Web & Mobile разработка полного цикла.
Подробнее

PHP-разработчик в ЛАБИРИНТ
Москва. Книжный холдинг.
Подробнее

Программист PHP в OOMI
Москва. Комплексный маркетинг, WEB разработка и аутсорсинг.
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
🤔63