WebCraft - ремесло веб разработки
6.46K subscribers
1.73K photos
259 videos
2 files
234 links
Интересуешься php , js , css , html , Laravel , Vue ? Этот канал для тебя

Админ, сотрудничество, реклама: @seniorFrontPromo, @maria_seniorfront
Менеджер по рекламе: @Spiral_Yuri

Купить рекламу: https://telega.in/c/web_craft
Download Telegram
Очистка журнала запросов в Laravel

Когда вы работаете с базой данных в Laravel, часто возникает необходимость отслеживать выполненные запросы для отладки и мониторинга производительности. Laravel предоставляет встроенную возможность вести журнал всех SQL-запросов, выполненных в рамках одного запроса HTTP. Для этого используется метод DB::enableQueryLog(), который активирует журнал запросов. Однако, когда журнал становится слишком большим или его данные больше не нужны, вам может понадобиться его очистить.

Здесь на помощь приходит метод flushQueryLog(). Этот метод позволяет быстро очистить текущий журнал запросов.

Пример:
use Illuminate\Support\Facades\DB;

// Включение журнала запросов
DB::enableQueryLog();

// Выполнение запросов
$users = DB::table('users')->get();
$posts = DB::table('posts')->get();

// Очистка журнала запросов
DB::flushQueryLog();

// Проверка журнала запросов
$log = DB::getQueryLog();
print_r($log); // Пустой массив, если журнал был очищен

👉 @web_craft | #laravel
Пользовательские карточки Laravel Pulse

Статья объясняет, как создать пользовательские карточки в Laravel Pulse для отображения метрик, таких как количество запросов на каждую машину Fly.io. В ней описывается создание Livewire-компонента, настройка отображения данных на карточке, перехват запросов с помощью middleware и запись этих данных в таблицы Pulse. В конце показывается, как вывести собранные данные на кастомной карточке в панели управления Pulse.

👉 @WebCraft | #laravel
Работа с методом dispatchAfterResponse() в Laravel

Когда выполняется задача, отправленная с помощью метода dispatchAfterResponse()?

Если забыли, то вернитесь к посту от 02.09.2024.

👉 @web_craft | #laravel
Защита полей модели

В Laravel механизм массового заполнения (Mass Assignment) позволяет быстро создавать или обновлять модели, заполняя их атрибуты массивом данных. Однако, чтобы предотвратить нежелательное или вредоносное заполнение полей, важно правильно настроить защиту через свойства $fillable или $guarded.

$guarded — это массив полей модели, которые запрещено массово заполнять. В отличие от $fillable, который указывает на разрешенные для массового заполнения поля, $guarded работает по принципу "запрещено всё, кроме". Это значит, что все поля модели защищены от массового заполнения, кроме тех, которые явно не указаны в массиве $guarded.

Предположим, у нас есть модель User, и мы хотим запретить массовое заполнение полей is_admin и password, чтобы они не могли быть изменены через массовое заполнение.
class User extends Model
{
protected $guarded = ['is_admin', 'password'];
}

В примере поля is_admin и password будут защищены от массового заполнения.

👉 @WebCraft | #laravel
Прокси объектов коллекции в Laravel на уровне высших порядков

Статья описывает механизм прокси объектов в Laravel для работы с коллекциями. Высокоуровневые прокси позволяют передавать методы к объектам коллекций напрямую, упрощая код и делая его более читаемым. Примеры включают отправку писем заблокированным пользователям или автоматизацию браузеров при тестировании.

👉 @web_craft | #laravel
Работа с методом withoutSyncingToSearch()

Что делает метод withoutSyncingToSearch() в Laravel?

Если забыли, то вернитесь к посту от 09.09.2024.

👉 @web_craft | #laravel
Кастомные атрибуты в моделях Laravel

В Laravel можно легко работать с кастомными атрибутами моделей, используя методы getAttribute(), setAttribute(). Эти методы позволяют контролировать, как данные сохраняются и выводятся из модели.

- getAttribute(): используется для доступа к значениям атрибутов. С его помощью можно модифицировать данные перед их возвратом.

- setAttribute(): позволяет модифицировать данные перед их сохранением в базе. Это удобно для предварительной обработки данных, например, шифрования паролей.
class User extends Model
{
public function getFullNameAttribute()
{
return "{$this->first_name} {$this->last_name}";
}

public function setPasswordAttribute($value)
{
$this->attributes['password'] = bcrypt($value);
}
}

В примере метод getFullNameAttribute() возвращает полное имя пользователя, а setPasswordAttribute() шифрует пароль перед сохранением в базе данных.

👉 @web_craft | #laravel
Использование метода flushQueryLog()

Для чего используется метод flushQueryLog() в Laravel?

Забыли? Вернитесь к посту от 16.09.2024.

👉 @web_craft | #laravel
Магия нового помощника defer() в Laravel

Статья объясняет, как работает новый хелпер defer() в Laravel, который позволяет откладывать выполнение долгих задач до завершения ответа. Он полезен для повышения производительности приложений, особенно при выполнении времязатратных операций, таких как обращения к внешним API. Автор также раскрывает детали работы метода и объясняет, как это реализовано на уровне middleware без использования очередей.

👉 @web_craft | #laravel
Работа с массивом $guarded

Что делает массив $guarded в модели Laravel?

Если забыли, то вернитесь к посту от 23.09.2024.

👉 @WebCraft | #laravel
Хук для отмены восстановления удалённых моделей

Хук eloquent.restoring вызывается перед тем, как восстановить мягко удалённую модель. Если вернуть false в функции-обработчике, Laravel отменит восстановление модели, и она останется помеченной как удалённая.
use App\Models\User;
use Illuminate\Support\Facades\Event;

// Запрещаем восстановление заблокированных пользователей
Event::listen('eloquent.restoring: ' . User::class, function (User $user) {
if ($user->isBlocked) {
return false;
}
});

Также можно использовать хук eloquent.restoring для логирования попыток восстановления или выполнения асинхронных операций перед тем, как модель будет восстановлена:
Event::listen('eloquent.restoring: ' . User::class, function (User $user) {
Log::info('Попытка восстановления пользователя: ' . $user->id);

if ($user->restorationAttempts >= 3) {
$user->sendRestorationWarning(); // Отправка предупреждения при частых попытках
return false;
}
});

👉 @web_craft | #laravel
Новый функционал для работы с массивами в PHP 8.4

Статья описывает новые функции для работы с массивами, которые появились в PHP 8.4: array_find, array_find_key, array_any и array_all. Эти функции позволяют проще и удобнее проверять наличие элементов в массиве, получать ключи по условию и проверять элементы на соответствие заданным критериям. Приведены примеры использования каждой функции с объяснением, как они работают.

👉 @web_craft | #laravel
Работа с моделями Laravel

Какой метод используется для изменения данных перед сохранением в модели?

Если забыли, то вернитесь к посту от 23.09.2024.

👉 @web_craft | #laravel
Метод assertViewIs() для тестирования представлений в Laravel

assertViewIs() проверяет, что контроллер или маршрут возвращают конкретное представление, которое вы ожидаете увидеть.

Проверка, что страница входа использует правильный шаблон:
public function testLoginPageReturnsCorrectView() {
$response = $this->get('/login');
$response->assertViewIs('auth.login');
}

Проверка представления на основе ролей пользователей:
public function testAdminUserSeesAdminPanel() {
$user = User::factory()->create(['role' => 'admin']);
$this->actingAs($user);

$response = $this->get('/dashboard');
$response->assertViewIs('admin.panel'); // Проверка на представление для админа
}

public function testRegularUserSeesHomePage() {
$user = User::factory()->create(['role' => 'user']);
$this->actingAs($user);

$response = $this->get('/dashboard');
$response->assertViewIs('home'); // Проверка на представление для обычного пользователя
}

👉 @web_craft | #laravel
Как Pinkary избегает регистрации с временных электронных адресов

В статье описывается, как платформа Pinkary (построенная на Laravel и Livewire) использует специальное правило валидации UnauthorizedEmailProviders для блокировки регистраций и обновлений email с временных доменов. Правило проверяет домен электронной почты с помощью списка запрещенных провайдеров, чтобы не допускать использования одноразовых адресов при регистрации на платформе.

👉 @web_craft | #laravel
Хук eloquent.replicating в Laravel

В Laravel eloquent.replicating позволяет обработать момент клонирования модели с помощью метода replicate(). Этот хук предоставляет возможность изменения или очистки данных перед созданием копии. Например, можно исключить чувствительные данные, такие как email, или сбросить уникальные поля, чтобы избежать конфликтов при сохранении клонированной записи в базе данных.

Пример:
use App\Models\User;
use Illuminate\Support\Facades\Event;

Event::listen('eloquent.replicating: ' . User::class, function (User $user) {
// Очищаем уникальные поля перед копированием
$user->email = null;
$user->api_token = null;
});

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

👉 @web_craft | #laravel
Гибкое кэширование в Laravel — это очень просто

Статья рассказывает о функции кэширования в LaravelCache::flexible(), которая позволяет балансировать между производительностью и свежестью данных с помощью двухуровневой системы TTL (Time to Live). Обсуждаются сценарии применения метода, такие как рекомендации в интернет-торговле, работа с аналитикой, и рассматриваются примеры реализации. Также описаны ситуации, когда эту функцию не следует использовать.

👉 @web_craft | #laravel
Работа с хуком eloquent.restoring

Когда срабатывает хук eloquent.restoring?

Если забыли, то вернитесь к посту от 14.10.2024.

👉 @web_craft | #laravel
Условная фильтрация через наличие реляционных данных

Метод whenHas() в Laravel Eloquent позволяет гибко управлять запросами, добавляя условия только тогда, когда существуют связанные реляционные данные. Это упрощает работу с запросами к базе данных, где нужно учитывать наличие связи с другой таблицей. Например, можно динамически добавлять фильтрацию по записям, у которых есть связанные комментарии. Это сокращает количество ненужных запросов и повышает производительность, так как дополнительная логика применяется только к тем данным, где она необходима.

Пример:
$posts = Post::query()
->whenHas('comments', function ($query) {
$query->where('approved', true);
})
->get();

В этом примере запрос вернёт только те записи из модели Post, у которых есть одобренные комментарии.

👉 @web_craft | #laravel
Автоматизация резервного копирования баз данных c Laravel

Статья рассказывает, как автоматизировать резервное копирование баз данных в Laravel. В ней объясняется, как использовать планировщик задач Laravel и сторонние облачные хранилища, такие как AWS S3, для создания и хранения бэкапов базы данных. Пошагово описывается создание пользовательской команды Artisan, настройка регулярных резервных копий и конфигурация для безопасного хранения данных в облаке.

👉 @web_craft | #laravel