Telegram Web Link
Для тех кто использует Laravel Octane в связке с FrankenPHP

Laravel Octane 2.9 и ниже не умеет работать с FrankenPHP 1.5 - при запуске будет возникать ошибка:

Local: http://127.0.0.1:9000

Press Ctrl+C to stop the server

WARN unable to determine directory for user configuration; falling back to current directory.
WARN HTTP/2 skipped because it requires TLS.
WARN HTTP/3 skipped because it requires TLS.
WARN $HOME environment variable is empty - please fix; some assets might be stored in ./caddy.


Временный фикс:

-php artisan octane:install --server=frankenphp -q
+curl https://github.com/dunglas/frankenphp/releases/download/v1.4.4/frankenphp-linux-x86_64 -o frankenphp


https://github.com/laravel/octane/issues/1020
👍3
50 миллионов скачиваний — это наш общий успех!

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

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

Спасибо, что вы со мной! Вместе мы сможем достичь ещё больших высот!

https://dragon-code.pro
👏12👍10🔥52🫡1
2👏1🤬1
Три способа построения запроса к релейшенам в Laravel

// Вариант 1
Inventory::query()
->where('city_id', $city->id)
->where('product_id', $product->id)
->where('store_id', $store->id)
->get();

// Вариант 2
Inventory::query()
->whereCityId($city->id)
->whereProductId($product->id)
->whereStoreId($store->id)
->get();

// Вариант 3
Inventory::query()
->whereBelongsTo($city)
->whereBelongsTo($product)
->whereBelongsTo($store)
->get();


Результаты бенчмарка на 100'000 итераций с вызовом метода toRawSql() вместо get() из примера выше:

 ------- -------------------- -------------------- --------------------- 
# where(column_id) whereColumnId whereBelongsTo
------- -------------------- -------------------- ---------------------
min 0.061 ms - 0 bytes 0.067 ms - 0 bytes 0.202 ms - 0 bytes
max 2.509 ms - 2.00 MB 1.155 ms - 2.00 MB 25.029 ms - 2.00 MB
avg 0.087 ms - 0 bytes 0.096 ms - 0 bytes 0.28 ms - 0 bytes
total 23285.103 ms 24046.848 ms 42309.312 ms
------- -------------------- -------------------- ---------------------
Order - 1 - - 2 - - 3 -
------- -------------------- -------------------- ---------------------


https://laravel.com/docs/12.x/eloquent-relationships#querying-belongs-to-relationships
2
👍5🫡31
Laravel Tip 💡: Объединение конфигураций в классы

Конфигурации Laravel часто используются повторно по всей кодовой базе, что может стать болезненным для управления. Вместо этого сгруппируйте связанные конфигурации в класс для более чистого и простого обслуживания 🚀
👍32
🚀 Улучшенное взаимодействие с конфигами в Laravel

1. Создайте файл stubs/config_class.stub со следующим содержимым:

<?php

declare(strict_types=1);

namespace DummyNamespace;

class DummyClass
{
public static function hasDebug(): bool
{
return config('app.debug');
}
}


2. В корне проекта создайте файл ide.json либо добавьте объект генерации если файл уже существует:

{
"$schema": "https://laravel-ide.com/schema/laravel-ide-v2.json",
"codeGenerations": [
{
"id": "app.config.class",
"name": "Create Config Class",
"classSuffix": "Config",
"regex": ".+",
"files": [
{
"appNamespace": "Config",
"name": "${INPUT_CLASS|replace: ,_|className|upperCamelCase}.php",
"template": {
"type": "stub",
"path": "stubs/config_class.stub",
"parameters": {
"DummyNamespace": "${INPUT_FQN|namespace}",
"DummyClass": "${INPUT_CLASS|replace: ,_|className|upperCamelCase}"
}
}
}
]
}
]
}


Теперь по хоткею Laravel Idea можно легко создавать классы для конфигов.
👍4
Наглядное представление отличий при использовании дефолтных значений, назначаемых колонкам БД от назначаемых внутри Laravel модели.

Schema::create('foo', function (Blueprint $table) {
$table->boolean('is_active')->default(false);
});

return Foo::create()->is_active; // null
return Foo::first()->is_active; // false


vs

Schema::create('foo', function (Blueprint $table) {
$table->boolean('is_active')->default(false);
});

class Foo extends Model
{
protected $attributes = [
'is_active' => true,
];
}

return Foo::create()->is_active; // true
return Foo::first()->is_active; // true
👍4
Hawk - российский трекер ошибок

Может работать с Sentry SDK

https://hawk.so
https://hawk-tracker.ru/pricing.pdf
👍3🔥2
Удобный способ выгрузки приложения из памяти без открытия окна диспетчера задач в Windows 11

Для активации нужно зайти в "Параметры" - "Система" - "Для разработчиков" и активировать опцию "Завершить задачу".

После этого появится новый пункт меню при клике правой кнопкой мыши по иконке программы.
3👍2
Forwarded from Laravel World
Сегодня PHP отмечает своё 30-летие.
👏84🍾2🎉1
🧙‍♂️ Притча о свитке и кузнеце

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

Но вот кузнецы, которым предназначались эти свитки, часто бросали лишь взгляд на начало, хватали молот и бежали работать. А потом возвращались с вопросами:
— А где найти камень?
— А что за ветер сбил нас с пути?

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

С тех пор в мастерской повесили табличку:
«Прежде чем ковать — прочти весь свиток. Возможно, он убережёт тебя от лишней боли и спасёт чьё-то терпение».
👍2
Позавчера Тейлор запустил новый сервис - Laravel Nightwatch.

Это сервис мониторинга работы приложения.

Краткий отзыв по истечении двух дней его использования вместе с анти-спам ботом @KvedeBot:

- Выдаёт общую информацию (есть или нет проблемы), в детали не вдаётся;
- Показывает список реально вызываемых консольных команд. Так, например, я узнал о команде php artisan schedule:finish, которая была вызвана 2'120 раз за это время... И да, эта команда также лимиты жрёт;
- Можно увидеть запросы к БД, но без самих данных - только конструкт;
- От внешних запросов виден лишь адрес без тела запроса;
- По общей статистике использования видим что из 200к бесплатных эвентов за двое суток приложение сожрало 173'596 (87%), из которых 49'009 эвентов - работа с кэшем. Да, эти cache hit, read, write и т.д. тоже считаются.

Таким образом, пришёл к выводу, что это MVP продукта и, с большой долей вероятности, он действительно будет хорош, но - потом. В текущем исполнении Nightwatch, скажем так, публикует хлам из подноготной фреймворка. Моё мнение, он делает это для того, чтобы побыстрее сожрать бесплатные лимиты дабы люди оформляли подписку.

В целом, сервис прикольный, но на полном серьёзе на сервере его использовать ну такое.
5👍31
2025/10/23 04:38:01
Back to Top
HTML Embed Code: