Библиотека пхпшника | 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
#дайджест новостей по PHP за неделю:

🔎Выпущен CakePHP 5.0.1-RC2 — Улучшения включают: Базовые классы CakePHP теперь совместимы с PHPUnit 11. Заменено внутреннее использование md5 на xxh128. Это повлияло на хэши, используемые для групповых префиксов в Cache + многое другое!

🔎Поддержка лог-файлов Laravel в PhpStorm

🔎Новый помощник для работы со строками, утверждение Enums в AssertableJson и многое другое в Laravel 11.20 — На этой неделе команда Laravel выпустила версию 11.20, в которую вошли новый метод коллекционирования, метод дедупликации строк, возможность использования Enums в AssertableJson и многое другое.

🔎PHP 8.4.0 Alpha 4 доступен для тестирования — Команда PHP рада сообщить о выходе второго тестового релиза PHP 8.4.0, Alpha 4. Это продолжение цикла выпуска PHP 8.4, примерный план которого указан в PHP Wiki.

🔎Неделя Symfony #919 (5-11 августа 2024 года)
👍2🎉2
Как создать тест кейс в Laravel с помощью Pest

Эта статья объясняет, как написать тесты для Laravel-приложения с использованием тестового фреймворка Pest. В качестве примера рассматривается тестирование создания записи о работодателе (Employer), включая загрузку логотипа.
👍3🥱2
💬Вы можете использовать правило проверки required_if_accepted, которое гарантирует, что проверяемое поле является обязательным, если другое поле принято (значение yes, on, 1 или true).
🔥4👍2😢1
Класс содержит свойство, которое, в свою очередь, является объектом. Что будет содержать это свойство в клонированном объекте: ссылка на тот же дочерний объект или копию дочернего объекта? Что нужно сделать, чтобы это изменить?

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

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

#вопросы_с_собеседований
👍14🥱5
От MySQL к Typesense: молниеносный полнотекстовый поиск в Laravel

Статья рассказывает о том, как реализовать поисковую функцию в приложениях на Laravel. Она начинается с основного подхода — использования операторов MySQL LIKE для поиска, и постепенно переходит к более сложным и эффективным методам, таким как полнотекстовый поиск и использование стороннего поискового движка Typesense.

Основные этапы:

Настройка проекта и заполнение базы данных: Создается базовая структура приложения Laravel, моделируется база данных с клиентами, и затем в неё заносятся два миллиона записей для тестирования производительности поиска.

Первый вариант поиска: использование LIKE-запросов: Рассматривается простой способ поиска с использованием оператора LIKE в MySQL. Этот метод эффективен для простых случаев, но имеет низкую производительность при большом объеме данных.

Оптимизация поиска: использование полнотекстовых индексов MySQL: Объясняется, как использовать полнотекстовый поиск для повышения производительности и точности поиска. Полнотекстовые индексы значительно ускоряют процесс поиска и позволяют находить более релевантные результаты.

Создание Livewire-компонента для поиска: Рассматривается создание пользовательского интерфейса для поиска с помощью Livewire — инструмента для создания интерактивных интерфейсов в Laravel. Компонент обновляет результаты поиска в режиме реального времени по мере ввода пользователем.

Ограничения полнотекстового поиска в MySQL: Обсуждаются ограничения полнотекстового поиска, такие как отсутствие поддержки опечаток и невозможность поиска по суффиксам и инфиксам.

Typesense: Мощный и быстрый поисковый движок с открытым исходным кодом: В качестве решения для сложных случаев поиска предлагается использование Typesense, который обеспечивает быстрый и точный поиск, а также решает проблемы, присущие MySQL.
👍6
Отладка PHP сценариев в Docker-контейнере с помощью PhpStorm и Xdebug. Глубокое погружение

Одним из ключевых аспектов успешной разработки является эффективная отладка кода.

Статья посвящена настройке и использованию PhpStorm, Xdebug и Docker для отладки PHP-скриптов в Docker-контейнере. Она предлагает актуальную информацию (на момент написания) и оформлена в виде подробнейшего пошагового туториала. Информация действительна для ОС Windows. В других ОС возможны варианты.
👍72👾1
Удаление дублирующихся символов в строках

Если вам нужно удалить дубликаты строк в Laravel и PHP-приложениях, в Laravel v11.20 добавлен новый метод deduplicate в String helpers, который позволяет быстро и легко удалять дубликаты символов.

use Illuminate\Support\{Str,Stringable};

$string = '/usr/local////path/to///desktop';

Str::deduplicate($string, '/');
// «/usr/local/path/to/desktop»

(new Stringable($string))->deduplicate('/')->toString();
// «/usr/local/path/to/desktop»


По умолчанию символом замены в методе deduplicate() является пробел, что также может быть использовано для помощника squish(), представленного в Laravel v9.7.0:

Str::deduplicate(' John Smith Jr. '); // « John Smith Jr. »
Str::squish(' John Smith Jr. '); // «John Smith Jr.»


Обратите внимание на лишние пробелы ' ' в начале и в конце при использовании deduplicate(), это сделано специально. Deduplicate используется для замены последовательных экземпляров данного символа на один символ в данной строке. Squish также удаляет другие пробельные символы, такие как новые строки и табуляции:

// Каждый пример возвращает `laravel php framework`:
Str::squish(' laravel php framework '));
Str::squish(«laravel\t\tphp\n\nframework»);
Str::squish('
laravel
php
framework
');
👍5👾1
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
BillaBear

Это отдельная система управления подписками и биллингом, интегрирующаяся со Stripe. Она предоставляет REST API, позволяющий легко интегрировать ее.
👍1
🤔 Как меняется математика в разных индустриях: от мобильных игр к фондовым рынкам

🗓 22 августа в прямом эфире разберем как математика применяется в разных отраслях бизнеса. И какие математические навыки необходимы для успешной работы в каждой из них.

Приглашенный спикер: Павел Запольский – Senior Quantitative Researcher at Exness и Co-founder GrowLytics. Запустивший более 10 проектов по машинному обучению и анализу данных для ведущих компаний.

😮 На вебинаре узнаете:

🔵 Математика в бизнесе: Чем отличаются разные сферы друг от друга. Почему стоит понимать специфику сферы
🔵 ML и продуктовое IT: Чем различается математическая сложность от индустрии к индустрии. Какие к ним необходимы уровни подготовки
🔵 Баевская математика в GameDev. Баевская математика как альтернатива AB тестированию. Как математические методы применяются в разработке игр
🔵 Finance: Что такое количественные финансы и математическое моделирование. Обсудим текущие индустриальные тренды в отрасли
🔵 Backtest: Как знания математики делают ваши активы более надежными
🔵 На практике подробно разберем два математических кейса по GameDev и Backtest.

➡️ Зарегистрироваться: https://proglib.io/w/0020721a
Please open Telegram to view this post
VIEW IN TELEGRAM
Расскажите про функции defined и get_defined_constants

defined():
Функция defined() используется для проверки существования константы с заданным именем. Она возвращает true, если константа существует, и false, если нет.

get_defined_constants():
Функция get_defined_constants() возвращает ассоциативный массив, содержащий все определенные константы в текущем скрипте. Этот массив имеет два уровня: глобальные константы и локальные (если они определены внутри функции).

#вопросы_с_собеседований
🥱14👍2
Вакансии «Библиотеки программиста» — ждем вас в команде!

Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
Зачем использовать declare(strict_types=1)

В этом туторе рассказано, что означает declare(strict_types=1), почему разработчикам PHP стоит его использовать, а почему нет, а также приведены примеры, иллюстрирующие его важность.

Эта установка обусловлена слабой динамической типизацией и растущим спросом на строго типизированные функции, который покрывают другие популярные языки, такие как Java.
👍4🌚2
📣 После изменения атрибутов записи Eloquent вы можете получить оригинальные атрибуты, вызвав метод getOriginal()
👍9🥱1
Привет, друзья! 👋

Мы готовим статью на тему: «5 признаков зависимости от программирования». Нам очень важно ваше мнение! Поделитесь своим опытом и советами, и самые интересные из них мы включим в статью.

Как вы понимаете, что программирование начинает занимать слишком много места в вашей жизни? Какие признаки вы замечаете?

🏄 Какие методы и стратегии вы используете, чтобы сохранить баланс между работой и личной жизнью?

😔 Был ли у вас опыт, когда программирование негативно влияло на ваши отношения с близкими или здоровье? Как вы справились с этим?

Ваши ответы помогут многим! Спасибо за участие!
🥱7
FrankenPHP увеличил скорость в 13 раз в режиме cgi

FrankenPHP недавно добился 13-кратного повышения производительности после устранения основного узкого места.

✔️Версия FrankenPHP 1.2.3

бенчмарк helloworld.

cgi before (num_threads 1): ~3000 запросов/секунду
cgi before (num_threads 40): ~2000 запросов/секунду

cgi after (num_threads 1): ~40.000 запросов/секунду
cgi after(num_threads 40): ~48.000 запросов/секунду

рабочий режим (1 воркер): ~40.000 запросов/секунду
рабочий режим (40 воркеров): ~44.000 запросов/секунду

Подробнее тут и тут.
🤔15👍2
Построение полиморфной транслируемой модели в Laravel с автозагрузкой переводов

Здесь описывается, как настроить систему перевода в Laravel, используя JSON-колонки для хранения переводов, что делает управление многоязычным контентом более эффективным.

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

Шаги по реализации:

Создание таблицы переводов:
Если таблица для переводов еще не существует, создается новая. В этой таблице будут храниться переводы в формате JSON, а также информация о языке перевода, типе и идентификаторе связанной модели (например, пост или продукт).

Запуск миграции:
Миграция применяется к базе данных, чтобы создать таблицу с нужной структурой.

Создание модели для переводов:
Создается модель для управления переводами. Эта модель описывает полиморфную связь с другими моделями, что позволяет использовать переводы для различных типов данных.

Создание трейта для перевода:
Для удобства работы с переводами создается трейт, который автоматически загружает переведенный контент в зависимости от выбранного языка. Если перевода для текущего языка нет, используется резервный перевод на языке по умолчанию.

Применение трейта к моделям:
Трейт добавляется к любой модели, для которой требуется поддержка перевода, например, к модели поста.

Добавление и получение переведенных данных:
Переводы можно добавлять и получать через методы модели. При этом учитывается текущая локаль, и если перевода для неё нет, используется перевод на языке по умолчанию.

Отображение переведенного контента в шаблонах:
В шаблонах Laravel (Blade) переведенный контент отображается как обычные атрибуты модели, что делает работу с многоязычным контентом простой и интуитивно понятной.
🥱3🤔1😢1