Laravel Enum: Чистый, структурированный и удобный для разработчиков
Теперь Laravel поддерживает нативные классы
🔧 Создание Enum через Artisan:
📁 Создастся файл:
📦 Пример класса Enum:
✅ Как использовать:
📌 Приведение типов в модели:
📌 Работа с Enum:
📌 Генерация
📌 Валидация ввода:
📌 Laravel Enums делают код чище, улучшают его читаемость и уменьшают количество ошибок, связанных с недопустимыми значениями. Используйте
📱 @dev_notes_ru
#Laravel
Теперь Laravel поддерживает нативные классы
Enum со встроенными функциями кастинга, меток и генерации через Artisan. Это отличный способ избавиться от "магических" строк и чисел в моделях и формах.🔧 Создание Enum через Artisan:
php artisan make:enum UserRole
📁 Создастся файл:
app/Enums/UserRole.php📦 Пример класса Enum:
namespace App\Enums;
enum UserRole: string
{
case Admin = 'admin';
case Manager = 'manager';
case Customer = 'customer';
public function label(): string
{
return match($this) {
self::Admin => 'Администратор',
self::Manager => 'Менеджер',
self::Customer => 'Клиент',
};
}
public static function options(): array
{
return array_map(
fn($role) => ['value' => $role->value, 'label' => $role->label()],
self::cases()
);
}
}
✅ Как использовать:
📌 Приведение типов в модели:
protected $casts = [
'role' => UserRole::class,
];
📌 Работа с Enum:
$user->role = UserRole::Admin;
echo $user->role->label(); // "Администратор"
📌 Генерация
<select> (Blade или Livewire):<select name="role">
@foreach (App\Enums\UserRole::options() as $option)
<option value="{{ $option['value'] }}">{{ $option['label'] }}</option>
@endforeach
</select>
📌 Валидация ввода:
'role' => ['required', new Enum(UserRole::class)],
📌 Laravel Enums делают код чище, улучшают его читаемость и уменьшают количество ошибок, связанных с недопустимыми значениями. Используйте
make:enum, для быстрого создания, и расширяйте функциональность по мере необходимости.#Laravel
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤣1
Что такое this в JavaScriptВо второй части серии Mat Marquis объясняет, что такое
this на самом деле, и помогает разобраться, чему он соответствует, исходя из различных контекстов.#JavaScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Laravel 12.6: Новый метод `
Laravel 12.6 представляет метод
🔧 Как это работало раньше:
✅ Теперь с `
Нужны кастомные заголовки? Просто передайте их:
✨ Почему это удобно:
- Меньше шаблонного кода в тестах
- Лучшая читаемость и понятность
- Упрощает поддержку и рефакторинг
📌 Метод
📱 @dev_notes_ru
#Laravel #Laravel12
requestException()` для удобной обработки ошибок HTTP-тестовLaravel 12.6 представляет метод
requestException() — более простой способ создания экземпляров RequestException при тестировании работы HTTP-клиента. Теперь можно эмулировать ошибочные ответы сервера чище и лаконичнее.🔧 Как это работало раньше:
use Illuminate\Http\Client\RequestException;
use Illuminate\Http\Client\Response;
$exception = new RequestException(
new Response(
Http::response(['error' => 'invalid_token'], 401)
)
);
✅ Теперь с `
requestException()`:use Illuminate\Support\Facades\Http;
$exception = Http::requestException(['error' => 'invalid_token'], 401);
Нужны кастомные заголовки? Просто передайте их:
$exception = Http::requestException(
['message' => 'Too many requests'],
429,
['X-RateLimit-Reset' => '30']
);
✨ Почему это удобно:
- Меньше шаблонного кода в тестах
- Лучшая читаемость и понятность
- Упрощает поддержку и рефакторинг
📌 Метод
requestException() делает HTTP-тесты чище, быстрее и выразительнее.#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
Cache::memo()` и зачем он нуженКак использовать мемоизацию кэша в Laravel для повышения производительности и сокращения сетевых обращений к Redis, Memcached и другим хранилищам.
Даже если вы используете кэш, Laravel каждый раз обращается к внешнему хранилищу. Это может быть Redis или Memcached — и каждый такой запрос может занимать лишние миллисекунды. В больших приложениях это превращается в серьёзную нагрузку.
#Laravel #Cache
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Отключение событий при создании Eloquent моделей
При тестировании часто возникает необходимость создавать записи через модель без запуска связанных событий. Сделать это очень просто с помощью метода
Пример использования со стандартной моделью:
Метод
Особенно удобно при тестировании с фабриками:
Этот код создаст трёх пользователей без генерации событий.
Другие варианты "тихого" создания:
-
-
Эти методы помогают ускорить тесты и избежать побочных эффектов при работе с моделями.
📱 @dev_notes_ru
#Laravel #Eloquent #tips
При тестировании часто возникает необходимость создавать записи через модель без запуска связанных событий. Сделать это очень просто с помощью метода
createQuietly.Пример использования со стандартной моделью:
$user = User::createQuietly([
'name' => 'Mabel',
'email' => 'mabel@codecourse.com'
]);
Метод
createQuietly не запускает никакие события, поэтому обработчики в наблюдателях моделей не сработают.Особенно удобно при тестировании с фабриками:
User::factory(3)->createQuietly();
Этот код создаст трёх пользователей без генерации событий.
Другие варианты "тихого" создания:
-
createOneQuietly() - для создания одной записи -
createManyQuietly() - для массового создания Эти методы помогают ускорить тесты и избежать побочных эффектов при работе с моделями.
#Laravel #Eloquent #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Проверка существования представления в Laravel
Если вы работаете с представлениями в Laravel напрямую и нужно заранее проверить, существует ли представление, вот как это сделать.
Это очень просто! Просто используйте метод
Учтите, что
📱 @dev_notes_ru
#Laravel #View #tips
Если вы работаете с представлениями в Laravel напрямую и нужно заранее проверить, существует ли представление, вот как это сделать.
Это очень просто! Просто используйте метод
exists класса View. В данном примере используется хелпер view.if (view()->exists('some.view')) {
// ...
}Учтите, что
some.view соответствует файлу /some/view.blade.php. Этот метод работает с точечной нотацией так же, как и при рендеринге представлений. #Laravel #View #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Вместо добавления множества файлов в
📱 @dev_notes_ru
#joke
.gitignore. Мы, просто, игнорируем всё. Отслеживаемые файлы необходимо добавлять вручную с помощь. git add -f myfile#joke
Please open Telegram to view this post
VIEW IN TELEGRAM
Преобразуйте исключения CSRF mismatch в исключения валидации для улучшения пользовательского опыта.
Поскольку исключения валидации обычно генерируют ответ редиректа, токен CSRF должен автоматически обновляться, чтобы пользователь мог повторить попытку.👍
📱 @dev_notes_ru
#Laravel #CSRF #tips
Поскольку исключения валидации обычно генерируют ответ редиректа, токен CSRF должен автоматически обновляться, чтобы пользователь мог повторить попытку.
#Laravel #CSRF #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣1
CSS `if()`: новая функция условной логики доступна в Chrome 137+
CSS с каждым днем превращается в настоящий «язык программирования». С появлением новых возможностей, таких как CSS переменные, функция `calc()`, псевдоклассы `:has()` и `:is()`, а также универсальные `@media` запросы, CSS упрощает создание сложных стилей и макетов.
В CSS появилась новая функция
🖥 Читать статью
📱 @dev_notes_ru
#Frontend #CSS
CSS с каждым днем превращается в настоящий «язык программирования». С появлением новых возможностей, таких как CSS переменные, функция `calc()`, псевдоклассы `:has()` и `:is()`, а также универсальные `@media` запросы, CSS упрощает создание сложных стилей и макетов.
В CSS появилась новая функция
if(), пока доступная только в Chrome 137 и выше. Это первый шаг к условной логике прямо в стилях.#Frontend #CSS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🔥1
Зачем нужны логические свойства CSS
Сегодня я хотел бы поговорить о логических свойствах CSS — новом (и, возможно, более эффективном) способе определения свойств, которые по своей природе являются направленными.
🖥 Читать статью
📱 @dev_notes_ru
#Frontend #CSS
Сегодня я хотел бы поговорить о логических свойствах CSS — новом (и, возможно, более эффективном) способе определения свойств, которые по своей природе являются направленными.
#Frontend #CSS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Каст модели AsUri
Ash Allen предоставил каст модели
👩💻 Подробности см. в Pull Request #55909.
📱 @dev_notes_ru
#Laravel #Laravel12
Ash Allen предоставил каст модели
AsUri, преобразующий значения в экземпляр Illuminate\Support\Uri и обратно.use Illuminate\Support\Uri;
use Illuminate\Database\Eloquent\Casts\AsUri;
protected function casts(): array
{
return [
// ...
'destination_url' => AsUri::class,
];
}
// Set a URL
$shortUrl->destination_url = new Uri('https://www.example.com:1234/hello?param=value');
$shortUrl->save();
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Агрегатные функции SQL
В статье мы рассмотрим наиболее часто используемые агрегатные функции SQL, их синтаксис, практические примеры и способы оптимального использования в запросах.
🖥 Читать статью
📱 @dev_notes_ru
#DataBase #SQL
В статье мы рассмотрим наиболее часто используемые агрегатные функции SQL, их синтаксис, практические примеры и способы оптимального использования в запросах.
#DataBase #SQL
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1🔥1
Контекстный биндинг интерфейса через атрибуты
Yitz Willroth добавил атрибут
👩💻 Подробности см. в Pull Request #55904.
📱 @dev_notes_ru
#Laravel #Laravel12
Yitz Willroth добавил атрибут
Give, позволяющий использовать контекстные зависимости с помощью атрибутов PHP 8:// Традиционный подход - в ServiceProvider
$this->app->when(UserController::class)
->needs(UserRepositoryInterface::class)
->give(DatabaseUserRepository::class);
use Illuminate\Container\Attribute\Give;
// Использование атрибута Give
class UserController extends Controller
{
public function __construct(
#[Give(DatabaseUserRepository::class)]
private UserRepositoryInterface $userRepository
) {}
}
// Ещё один пример
class OrderService
{
public function __construct(
#[Give(StripePaymentProcessor::class)]
private PaymentProcessorInterface $processor
) {}
}
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1👎1🔥1
В Query Builder добавлен
Rihulfa Akbar добавил в конструктор запросов метод
👩💻 Подробности см. в Pull Request #55885.
📱 @dev_notes_ru
#Laravel #Laravel12
reorderDesc()Rihulfa Akbar добавил в конструктор запросов метод
reorderDesc(), являющийся сокращением для добавления в запрос условия сортировки по убыванию:// использование reorder()
$this->reorder($column, 'desc');
// reorderDesc()
$query->reorderDesc($column);
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM