Как создать тест кейс в Laravel с помощью Pest
Эта статья объясняет, как написать тесты для Laravel-приложения с использованием тестового фреймворка Pest. В качестве примера рассматривается тестирование создания записи о работодателе (Employer), включая загрузку логотипа.
Эта статья объясняет, как написать тесты для Laravel-приложения с использованием тестового фреймворка Pest. В качестве примера рассматривается тестирование создания записи о работодателе (Employer), включая загрузку логотипа.
DEV Community
How to Create a Test Case in Laravel Using Pest
Testing your Laravel application is crucial to ensure that your code works as expected. Pest is a...
👍3🥱2
Класс содержит свойство, которое, в свою очередь, является объектом. Что будет содержать это свойство в клонированном объекте: ссылка на тот же дочерний объект или копию дочернего объекта? Что нужно сделать, чтобы это изменить?
При клонировании объекта, свойство, которое является объектом, будет содержать ссылку на тот же дочерний объект, а не его копию.
Чтобы изменить это поведение и создать копию дочернего объекта в клонированном объекте, необходимо определить метод __clone() для класса. В этом методе можно явно создать копию дочернего объекта и присвоить ее свойству клонируемого объекта.
Пример реализации на фото
#вопросы_с_собеседований
При клонировании объекта, свойство, которое является объектом, будет содержать ссылку на тот же дочерний объект, а не его копию.
Чтобы изменить это поведение и создать копию дочернего объекта в клонированном объекте, необходимо определить метод __clone() для класса. В этом методе можно явно создать копию дочернего объекта и присвоить ее свойству клонируемого объекта.
Пример реализации на фото
#вопросы_с_собеседований
👍14🥱5
От MySQL к Typesense: молниеносный полнотекстовый поиск в Laravel
Статья рассказывает о том, как реализовать поисковую функцию в приложениях на Laravel. Она начинается с основного подхода — использования операторов MySQL LIKE для поиска, и постепенно переходит к более сложным и эффективным методам, таким как полнотекстовый поиск и использование стороннего поискового движка Typesense.
Основные этапы:
Настройка проекта и заполнение базы данных: Создается базовая структура приложения Laravel, моделируется база данных с клиентами, и затем в неё заносятся два миллиона записей для тестирования производительности поиска.
Первый вариант поиска: использование LIKE-запросов: Рассматривается простой способ поиска с использованием оператора LIKE в MySQL. Этот метод эффективен для простых случаев, но имеет низкую производительность при большом объеме данных.
Оптимизация поиска: использование полнотекстовых индексов MySQL: Объясняется, как использовать полнотекстовый поиск для повышения производительности и точности поиска. Полнотекстовые индексы значительно ускоряют процесс поиска и позволяют находить более релевантные результаты.
Создание Livewire-компонента для поиска: Рассматривается создание пользовательского интерфейса для поиска с помощью Livewire — инструмента для создания интерактивных интерфейсов в Laravel. Компонент обновляет результаты поиска в режиме реального времени по мере ввода пользователем.
Ограничения полнотекстового поиска в MySQL: Обсуждаются ограничения полнотекстового поиска, такие как отсутствие поддержки опечаток и невозможность поиска по суффиксам и инфиксам.
Typesense: Мощный и быстрый поисковый движок с открытым исходным кодом: В качестве решения для сложных случаев поиска предлагается использование Typesense, который обеспечивает быстрый и точный поиск, а также решает проблемы, присущие MySQL.
Статья рассказывает о том, как реализовать поисковую функцию в приложениях на 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. В других ОС возможны варианты.
Одним из ключевых аспектов успешной разработки является эффективная отладка кода.
Статья посвящена настройке и использованию PhpStorm, Xdebug и Docker для отладки PHP-скриптов в Docker-контейнере. Она предлагает актуальную информацию (на момент написания) и оформлена в виде подробнейшего пошагового туториала. Информация действительна для ОС Windows. В других ОС возможны варианты.
Хабр
Отладка PHP сценариев в Docker-контейнере с помощью PhpStorm и Xdebug. Глубокое погружение
Содержание Вместо введения Что, опять? Как это работает? Создаём проект в PHPStorm Создаём контейнер Docker Добавляем расширение Xdebug Настраиваем Xdebug Что там в логах Xdebug? Настраиваем PhpStorm...
👍7❤2👾1
Удаление дублирующихся символов в строках
Если вам нужно удалить дубликаты строк в Laravel и PHP-приложениях, в Laravel v11.20 добавлен новый метод deduplicate в String helpers, который позволяет быстро и легко удалять дубликаты символов.
По умолчанию символом замены в методе deduplicate() является пробел, что также может быть использовано для помощника squish(), представленного в Laravel v9.7.0:
Обратите внимание на лишние пробелы ' ' в начале и в конце при использовании deduplicate(), это сделано специально. Deduplicate используется для замены последовательных экземпляров данного символа на один символ в данной строке. Squish также удаляет другие пробельные символы, такие как новые строки и табуляции:
Если вам нужно удалить дубликаты строк в 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, позволяющий легко интегрировать ее.
Это отдельная система управления подписками и биллингом, интегрирующаяся со Stripe. Она предоставляет REST API, позволяющий легко интегрировать ее.
GitHub
GitHub - billabear/billabear: Subscription Management and Billing System
Subscription Management and Billing System. Contribute to billabear/billabear development by creating an account on GitHub.
👍1
Приглашенный спикер: Павел Запольский – Senior Quantitative Researcher at Exness и Co-founder GrowLytics. Запустивший более 10 проектов по машинному обучению и анализу данных для ведущих компаний.
Please open Telegram to view this post
VIEW IN TELEGRAM
Расскажите про функции defined и get_defined_constants
defined():
Функция defined() используется для проверки существования константы с заданным именем. Она возвращает true, если константа существует, и false, если нет.
get_defined_constants():
Функция get_defined_constants() возвращает ассоциативный массив, содержащий все определенные константы в текущем скрипте. Этот массив имеет два уровня: глобальные константы и локальные (если они определены внутри функции).
#вопросы_с_собеседований
defined():
Функция defined() используется для проверки существования константы с заданным именем. Она возвращает true, если константа существует, и false, если нет.
get_defined_constants():
Функция get_defined_constants() возвращает ассоциативный массив, содержащий все определенные константы в текущем скрипте. Этот массив имеет два уровня: глобальные константы и локальные (если они определены внутри функции).
#вопросы_с_собеседований
🥱14👍2
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉авторов в наше медиа proglib.io
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
ad.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
Зачем использовать declare(strict_types=1)
В этом туторе рассказано, что означает declare(strict_types=1), почему разработчикам PHP стоит его использовать, а почему нет, а также приведены примеры, иллюстрирующие его важность.
Эта установка обусловлена слабой динамической типизацией и растущим спросом на строго типизированные функции, который покрывают другие популярные языки, такие как Java.
В этом туторе рассказано, что означает declare(strict_types=1), почему разработчикам PHP стоит его использовать, а почему нет, а также приведены примеры, иллюстрирующие его важность.
Эта установка обусловлена слабой динамической типизацией и растущим спросом на строго типизированные функции, который покрывают другие популярные языки, такие как Java.
DEV Community
Why use declare(strict_types=1) in PHP – Fast tips
In this tutorial, we'll explore what declare(strict_types=1) means, why PHP developers should use it...
👍4🌚2
Привет, друзья! 👋
Мы готовим статью на тему: «5 признаков зависимости от программирования». Нам очень важно ваше мнение! Поделитесь своим опытом и советами, и самые интересные из них мы включим в статью.
⌛ Как вы понимаете, что программирование начинает занимать слишком много места в вашей жизни? Какие признаки вы замечаете?
🏄 Какие методы и стратегии вы используете, чтобы сохранить баланс между работой и личной жизнью?
😔 Был ли у вас опыт, когда программирование негативно влияло на ваши отношения с близкими или здоровье? Как вы справились с этим?
Ваши ответы помогут многим! Спасибо за участие!
Мы готовим статью на тему: «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 запросов/секунду
Подробнее тут и тут.
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) переведенный контент отображается как обычные атрибуты модели, что делает работу с многоязычным контентом простой и интуитивно понятной.
Здесь описывается, как настроить систему перевода в Laravel, используя JSON-колонки для хранения переводов, что делает управление многоязычным контентом более эффективным.
Вместо того чтобы хранить каждый перевод в отдельной строке базы данных, можно использовать JSON-колонку, в которой все переводы для одного элемента будут храниться вместе. Это упрощает как управление данными, так и их извлечение.
Шаги по реализации:
✅Создание таблицы переводов:
Если таблица для переводов еще не существует, создается новая. В этой таблице будут храниться переводы в формате JSON, а также информация о языке перевода, типе и идентификаторе связанной модели (например, пост или продукт).
✅Запуск миграции:
Миграция применяется к базе данных, чтобы создать таблицу с нужной структурой.
✅Создание модели для переводов:
Создается модель для управления переводами. Эта модель описывает полиморфную связь с другими моделями, что позволяет использовать переводы для различных типов данных.
✅Создание трейта для перевода:
Для удобства работы с переводами создается трейт, который автоматически загружает переведенный контент в зависимости от выбранного языка. Если перевода для текущего языка нет, используется резервный перевод на языке по умолчанию.
✅Применение трейта к моделям:
Трейт добавляется к любой модели, для которой требуется поддержка перевода, например, к модели поста.
✅Добавление и получение переведенных данных:
Переводы можно добавлять и получать через методы модели. При этом учитывается текущая локаль, и если перевода для неё нет, используется перевод на языке по умолчанию.
✅Отображение переведенного контента в шаблонах:
В шаблонах Laravel (Blade) переведенный контент отображается как обычные атрибуты модели, что делает работу с многоязычным контентом простой и интуитивно понятной.
DEV Community
Building a Polymorphic Translatable Model in Laravel with Autoloaded Translations
When handling multilingual content, it’s often more efficient to store translations in a JSON column...
🥱3🤔1😢1
Повышаем читаемость Symfony DI
Разработчик, работающий с Symfony, делится опытомhttps://habr.com/ru/articles/833134/ создания приложений и рассказывает о проблемах, с которыми он столкнулся при использовании Symfony DI. Он также делится советами, которые, по его мнению, будут полезны при разработке крупных приложений.
Разработчик, работающий с Symfony, делится опытомhttps://habr.com/ru/articles/833134/ создания приложений и рассказывает о проблемах, с которыми он столкнулся при использовании Symfony DI. Он также делится советами, которые, по его мнению, будут полезны при разработке крупных приложений.
Хабр
Повышаем читаемость Symfony DI
Привет! Я разрабатываю приложения на Symfony и хочу поделиться проблемами, с которыми сталкивался при использовании Symfony DI, а также дать несколько советов которые, как мне кажется, будут полезны...
👍6🥱4🔥1
AI Tool Bridge
Основной проблемой при интеграции ИИ в любой проект является управление взаимодействием между ИИ и остальной частью вашего приложения. Это становится особенно сложным, когда ИИ необходимо выполнять вызовы API для получения информации или инициирования действий.
AI Tool Bridge для PHP элегантно решает эту проблему, предлагая простой интерфейс для определения «инструментальных функций», которые ИИ может использовать, когда ему необходимо взаимодействовать с внешними системами.
Важной оптимизацией является способность библиотеки генерировать необходимую структуру JSON для функционирования инструмента. Он делает это, запрашивая у ИИ только необходимые значения, а затем генерируя JSON на основе предоставленной схемы JSON. Такой подход гарантирует достоверность окончательного JSON, который достигает кода вашего приложения.
Ключевые особенности этой библиотеки включают в себя:
✅Облегчение определения инструментов, которые ИИ может использовать для внешних взаимодействий.
✅Предоставление надежной структуры подсказок, чтобы подсказывать ИИ, когда и как использовать эти инструменты.
✅Обеспечение запуска инструментов с полным и правильно отформатированным JSON.
Основной проблемой при интеграции ИИ в любой проект является управление взаимодействием между ИИ и остальной частью вашего приложения. Это становится особенно сложным, когда ИИ необходимо выполнять вызовы API для получения информации или инициирования действий.
AI Tool Bridge для PHP элегантно решает эту проблему, предлагая простой интерфейс для определения «инструментальных функций», которые ИИ может использовать, когда ему необходимо взаимодействовать с внешними системами.
Важной оптимизацией является способность библиотеки генерировать необходимую структуру JSON для функционирования инструмента. Он делает это, запрашивая у ИИ только необходимые значения, а затем генерируя JSON на основе предоставленной схемы JSON. Такой подход гарантирует достоверность окончательного JSON, который достигает кода вашего приложения.
Ключевые особенности этой библиотеки включают в себя:
✅Облегчение определения инструментов, которые ИИ может использовать для внешних взаимодействий.
✅Предоставление надежной структуры подсказок, чтобы подсказывать ИИ, когда и как использовать эти инструменты.
✅Обеспечение запуска инструментов с полным и правильно отформатированным JSON.
GitHub
GitHub - manuelkiessling/php-ai-tool-bridge: Seamlessly empower your AI integration to interact with your own code and services
Seamlessly empower your AI integration to interact with your own code and services - manuelkiessling/php-ai-tool-bridge
👍3🔥2