The Dragon Code News
260 subscribers
218 photos
7 videos
4 files
240 links
Рассказываем о том, над чем работаем и что может быть полезным разработчикам 🙂

dragon-code.pro
Download Telegram
Список удобных алиасов для работы с Laravel и Composer

composer normalize приводит состояние файла composer.json согласно официальной схеме Composer. Реализуется путём глобальной установки пакета ergebnis/composer-normalize.
Forwarded from Andrey Helldar
Простой и быстрый способ локализации маршрутов 🗺

Сегодня наша команда поздравляет Вас с выходом одного из запланированных проектов - laravel-lang/routes.

Его задача заключается в локализации приложения при входящих запросах посредством URL-параметра, заголовка, куков или данных сессии.

Информацию по установке и использованию можно найти в документации: https://laravel-lang.com/packages-routes.html
👍1
Порядок регистрации пакетов в Laravel

Сегодня столкнулись с проблемой, следствием которой стала невозможность установки пакетов в приложение.

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

Итак, в данном случае устанавливали пакет laravel-lang/common, который имеет свои зависимости. Некоторые из них, в конечном итоге, обращаются к пакету конфигурации, вынесенному отдельно для удобства работы с ними в рамках проекта Laravel-Lang.

Так вот, после установки, Laravel вызывает механизм Illuminate\Foundation\ComposerScripts::postAutoloadDump, который проходит по всем пакетам и регистрирует их. Composer отдаёт этот список в алфавитном порядке, а так как Actions находится выше Config, то и инициализируется раньше.

Далее идёт цепочка:

1. Actions вызывает внутреннюю механику Publisher
2. Publisher обращается к скрытой (читай системной) области конфигураций
3. Конфигурация возвращает ошибку потому что в этот момент она ещё не была зарегистрирована.

Добавлять вызов сервис-провайдера от Config в блок extra файла composer.json тоже бесполезно - не работает, проверено.

Но что же делать? - спросите.

И решения найдено два:

1. В случае "отсутствия" конфигурации тип конечной переменной должен быть готов принять null в качестве значения, либо его инициализатор должен учитывать это состояние и подставлять "дефолтное" значение.

2. Можно добавить вызов регистрации сервис-провайдера в метод register самого пакета. Например:

use \LaravelLang\Config\ServiceProvider as CSP;

$this->app->register(CSP::class);


Но если таких пакетов много, то второй вариант максимально близок к утопии.
🔥1
Новый проект в стадии активной разработки

Уже скоро в Laravel-Lang! 😊
👀2👍1🔥1🤔1
Работа с новой архитектурой в Laravel 11

Основная "киллер-фича" фреймворка Laravel версии 11 - "плоский код". Под капот убрано всё, что большинством разработчиков не используется и, по сути, является "мусором". А также убраны некоторые действительно полезные вещи.

В статье мы рассмотрим что куда делось и как улучшить взаимодействие с новой архитектурой.

https://habr.com/ru/articles/822185/
🔥41
Алиасы устанавливаемых зависимостей

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

Конечно, можно указать алиас ветки в том самом репозитории, но это не всегда срабатывает, да и Packagist любит превращать их тег, например, в 1.0.x-dev при том, что алиас задан как 1.0-dev, что делает практически невозможным их установку.

Но решение есть и очень простое - инлайновый алиас. Всё что нужно сделать - это указать dev версию той самой зависимости как стабильную и выполнить команду composer update. И зависимость будет без проблем установлена.

Главное, не забудьте её переключить перед релизом 😉
5🤯2
Состоялся первый публичный релиз Laravel Lang: Models v1.0-beta1 🔥

Проект, реализующий перевод контента в приложении с удобным хранением и использованием.

Документация будет в ближайшее время 💪

https://github.com/Laravel-Lang/models
🔥21
Иногда возникает необходимость выполнить какие-либо действия над коллекцией релейшена для использования в нескольких местах приложения.

Один из часто встречаемых вариантов - это метод keyBy, когда нужно ключи массива превратить в какое-либо значение из результата.

Метод afterQuery в Laravel 11.4+ позволяет выполнить эти действия, сохранив результат в релейшены. Таким образом, снаружи больше не будет необходимости их повторять.
3😱2🔥1
Отслеживание запросов N+1 к базе данных - это легко!

Одна из основных проблем средних и больших приложений в том, что, в какой-то момент времени разработчики перестают отслеживать множественные запросы при обращении к релейшенам.

Именно для этого существует метод Model::preventLazyLoading, который позволяет активировать их обнаружение.

Работает он просто - если при запуске приложения обнаружено обращение к релейшену коллекции, для которого не была применена жадная загрузка, такой запрос упадёт с ошибкой, сообщив об этом.

При этом, совсем не стоит бояться выгружать его на продакшен - именно для этого в его аргумент можно передать условие активации везде, кроме прода.

Таким образом, если Ваше приложение покрыто тестами, Вы на этапе их запуска узнаете об этом 🙂

https://laravel.com/docs/eloquent-relationships#preventing-lazy-loading
🔥1🤯1
The Dragon Code News
Иногда возникает необходимость выполнить какие-либо действия над коллекцией релейшена для использования в нескольких местах приложения. Один из часто встречаемых вариантов - это метод keyBy, когда нужно ключи массива превратить в какое-либо значение из результата.…
Обнаружен нюанс метода afterQuery - если в модель прокинуть вызов with с релейшенами, то он перезатирает результат.

Но и решение проблемы банально простое - нужно в модели переопределить метод setRelation. Да, костыль. Зато работает.
Переиспользуемые скоупы

Традиционно, переиспользуемые скоупы запросов всегда определялись в самой модели с помощью магического метода scopeXXX, макросов или специального класса Builder. В первых двух случаях проблема заключается в том, что они оба опираются на неявную магию, что делает (почти) невозможным получение подсказок со стороны IDE без применения специальных инструментов. Ещё хуже то, что в случае регистрации макросов, может возникнуть конфликт имён. Однако, существует и четвёртый, на мой взгляд, более эффективный подход: использование переиспользуемых скоупов (tappable scopes).

Подробнее об этом и не только способе можно прочитать здесь и здесь.
👍31
Forwarded from Laravel World
Jujutsu — новая система контроля версий, разработанная инженером-программистом из Google, которая призвана заменить существующие системы контроля версий в корпорации (исторически: Perforce, Piper и Mercurial). Она интересна используемым подходом и тщательным выбором дизайна с точки зрения как деталей реализации, так и пользовательского интерфейса. И предлагает ответ на вопрос: как может выглядеть система контроля версий следующего поколения, которая фактически извлекла уроки из лучших частей всех систем этого поколения, включая Mercurial, Git, Darcs, Fossil и тд?

Обзор системы: https://v5.chriskrycho.com/essays/jj-init/
Вышел релиз Laravel Lang Models 1.0 🎉

Models - это система управления локализацией контента.

https://laravel-lang.com/packages-models.html
🔥2🎉1
Небольшое видео по использованию связки системы управления локализацией контента Laravel Lang Models вместе с локализацией маршрутов Laravel Lang Routes.

https://youtu.be/mH76pGbpVu0
При обновлении зависимости orchestral/testbench-core стали падать тесты? Значит необходимо внести параметр APP_ENV со значением testing либо workbench в файл phpunit.xml.

В PR orchestral/testbench-core#215 переименовали значение параметра на workbench, что и привело к поломке без использования Workbench.

Проблема затрагивает следующие версии:

- 9.2.1
- 9.2.0
- 8.25.0
- 7.44.0
- 6.51.0

Проект orchestral/testbench используется для тестирования Laravel пакетов при их разработке.
🤔1
Forwarded from КБ
Срочно: мошенники начали «угонять» Telegram-аккаунты с помощью новой схемы — они используют фейковый «официальный» аккаунт Telegram Security Messenger.Скамеры заваливают жертву запросами на получение кода подтверждения и предлагают перейти по ссылке, чтобы обезопасить аккаунт от взлома. Если нажать на ссылку — можно прощаться с учёткой.
👍2💅1
Пройдите тест на знание SQL, научитесь составлять эффективные SQL запросы и решать задачи по SQL, подготовьтесь к собеседованиям.

Задания по SQL подходят как новичкам, так и опытным специалистам.

https://sqltest.online
👍5❤‍🔥1