👍 - Это мой козырь, ленивый человек быстрее сделает всю свою работу, чтобы у него осталось больше времени на "ничего не делать".
❤️ - Я к ней не отношусь.
👉 @web_craft |#юмор
Если вы интересуетесь php, js, css, html, Laravel, Vue, то канал @web_craft идеально подойдет для вас. Здесь вы найдете самые актуальные новости, полезные советы, интересные статьи и многое другое, связанное с веб-разработкой. nnАдмины канала всегда рады помочь вам и ответить на ваши вопросы. Если у вас есть предложения по сотрудничеству или вы хотите разместить рекламу, обратитесь к админам @seniorFrontPromo или @maria_seniorfront. Менеджер по рекламе @Spiral_Yuri также всегда готов проконсультировать вас и помочь с размещением вашей рекламы. nnНе упустите возможность купить рекламу на канале @web_craft и донести ваше сообщение до тысяч подписчиков. Посетите https://telega.in/c/web_craft для получения дополнительной информации и приобретения рекламного места. Присоединяйтесь к каналу WebCraft - ремесло веб разработки и расширьте свои знания и навыки в области веб-разработки!
29 Nov, 08:02
28 Nov, 14:36
28 Nov, 07:12
?=
в JavaScript, который упрощает обработку ошибок при присваивании, делая код более компактным и читабельным, без использования try-catch
.27 Nov, 06:52
26 Nov, 14:33
Xdebug
в PhpStorm для отладки PHP-скриптов без необходимости конфигурирования файлов php.ini
или xdebug.ini
. 26 Nov, 07:29
FinalizationRegistry
в JavaScript – это механизм, который помогает автоматизировать процесс освобождения памяти, ассоциируя очистку с объектами, когда они больше не нужны. FinalizationRegistry
создаёт "реестр финализации", в который можно зарегистрировать объекты с указанием "очистительной" функции, которая будет вызвана сборщиком мусора, когда объект станет недоступен. const registry = new FinalizationRegistry((heldValue) => {
console.log(`Ресурс "${heldValue}" был очищен из памяти`);
});
(function() {
let userSession = { id: 'session_12345' };
registry.register(userSession, 'User Session Resource');
userSession = null; // Устанавливаем в null, чтобы позволить сборщику мусора освободить память
})();
userSession
регистрируется с меткой "User Session Resource", и когда сборщик мусора удалит его, будет выполнена функция, выводящая сообщение об освобождении памяти. 25 Nov, 08:11
Route::macro()
в Laravel позволяет добавлять собственные методы в маршрутизацию, это расширяет возможности стандартного роутинга и позволяет создавать более читабельный код. use Illuminate\Support\Facades\Route;
Route::macro('adminRoutes', function ($callback) {
Route::prefix('admin')
->namespace('Admin')
->middleware('auth')
->group($callback);
});
Route::adminRoutes(function () {
Route::get('/dashboard', 'DashboardController@index');
Route::resource('users', 'UserController');
});
adminRoutes
добавляет префикс и пространство имен для всех маршрутов внутри вызова, упрощая организацию кода и делая его более модульным. 24 Nov, 09:17
queueMicrotask()
?23 Nov, 14:15
whenHas()
?21 Nov, 15:10
21 Nov, 07:31
20 Nov, 08:31
19 Nov, 18:00
db:wipe
, migrate:fresh
) в продакшене, используя метод DB::prohibitDestructiveCommands()
. Это помогает защитить данные от случайного удаления или изменения в рабочей среде.19 Nov, 14:00
19 Nov, 08:10
Reflect.construct()
предоставляет инструмент для динамического создания экземпляров классов в JavaScript. В отличие от обычного вызова конструктора через new, Reflect.construct()
позволяет вызывать конструкторы с массивом аргументов и даже устанавливать прототип для нового объекта.Reflect.construct()
:class User {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const user = Reflect.construct(User, ['Alice', 25]);
console.log(user); // User { name: 'Alice', age: 25 }
Reflect.construct()
вызывает конструктор User
с массивом аргументов ['Alice', 25]
. Такой подход позволяет гибко инициализировать объекты, когда их тип и параметры неизвестны на этапе компиляции.18 Nov, 07:40
Dependency Injection (DI)
— паттерн, позволяющий передавать зависимости объекта извне, а не создавать их внутри. В Laravel DI
реализуется через Service Container
.Service Container
мы можем привязывать классы и интерфейсы, позволяя Laravel автоматически разрешать зависимости. Представьте, что у нас есть интерфейс PaymentGatewayInterface
и его реализация StripePaymentGateway
. Мы можем зарегистрировать его в контейнере:$this->app->bind(PaymentGatewayInterface::class, StripePaymentGateway::class);
PaymentGatewayInterface
, Laravel передаст объект StripePaymentGateway
. Это упрощает подмену реализаций, например, для тестирования.singleton
, если нужно, чтобы зависимость создавалась один раз на весь жизненный цикл приложения:$this->app->singleton(PaymentGatewayInterface::class, StripePaymentGateway::class);
17 Nov, 09:13
Symbol.iterator
в объекте?16 Nov, 15:14
replicate()
?16 Nov, 06:52
15 Nov, 08:02
14 Nov, 14:36
14 Nov, 07:12
13 Nov, 06:52
12 Nov, 14:33
12 Nov, 07:29
structuredClone()
— это встроенная функция JavaScript для создания глубокой копии объектов, включая сложные структуры, такие как вложенные массивы и объекты. Раньше для этого использовали различные техники, такие как JSON.stringify/parse
или рекурсивные функции.structuredClone()
в том, что он корректно обрабатывает многие типы данных, включая Map, Set, ArrayBuffer, и даже циклические ссылки, с которыми не справляется метод JSON.stringify()
. const original = { name: "Alex", data: { age: 25, hobbies: ["reading", "gaming"] } };
const copy = structuredClone(original);
copy.data.age = 26;
console.log(original.data.age); // 25, оригинальный объект не изменился
console.log(copy.data.age); // 26, независимая копия
structuredClone()
создаёт полную копию объекта original
, позволяя изменять данные в copy
без влияния на оригинальный объект.11 Nov, 10:08
10 Nov, 18:07
signedRoute()
предоставляет простой способ создания подписанных URL-адресов, которые помогают ограничивать доступ к ресурсам и предотвращают их несанкционированное изменение. Такие URL содержат цифровую подпись, которая подтверждает, что они были созданы вашим приложением. Это особенно полезно для ссылок, которые нужно защитить, например, для сброса пароля или приглашений с ограниченным доступом.use Illuminate\Support\Facades\URL;
$url = URL::signedRoute('user.verify', ['user' => 1]);
user.verify
. Если кто-то изменит параметры URL, подпись станет недействительной, и Laravel отклонит запрос.Middleware signed
, который автоматически проверяет действительность ссылки:Route::get('/email/verify', function () {
// действие
})->name('user.verify')->middleware('signed');
10 Nov, 09:17
Object.getOwnPropertySymbols()
?09 Nov, 14:15
assertViewIs()
в Laravel?08 Nov, 17:45
08 Nov, 15:40
08 Nov, 08:06
07 Nov, 13:00
07 Nov, 06:02
06 Nov, 14:00
06 Nov, 12:00
06 Nov, 08:31
05 Nov, 15:20
05 Nov, 08:10
queueMicrotask()
добавляет микрозадачу в очередь для выполнения после текущего синхронного кода, но перед макрозадачами. Это полезно, когда нужно выполнить что-то асинхронно, но без задержек. function simulateHeavyOperation() {
console.log('Начало операции');
queueMicrotask(() => {
console.log('Микрозадача 1');
});
for (let i = 0; i < 1e6; i++) {
if (i === 1e6 - 1) {
console.log('Операция завершена');
}
}
queueMicrotask(() => {
console.log('Микрозадача 2');
});
console.log('Завершение основной задачи');
}
simulateHeavyOperation();
// Макрозадача
setTimeout(() => {
console.log('Макрозадача');
}, 0);
setTimeout()
.04 Nov, 07:40
whenHas()
в Laravel Eloquent позволяет гибко управлять запросами, добавляя условия только тогда, когда существуют связанные реляционные данные. Это упрощает работу с запросами к базе данных, где нужно учитывать наличие связи с другой таблицей. Например, можно динамически добавлять фильтрацию по записям, у которых есть связанные комментарии. Это сокращает количество ненужных запросов и повышает производительность, так как дополнительная логика применяется только к тем данным, где она необходима.$posts = Post::query()
->whenHas('comments', function ($query) {
$query->where('approved', true);
})
->get();
03 Nov, 09:13
Object.preventExtensions(obj)
?02 Nov, 15:14
eloquent.restoring
?02 Nov, 06:52
this
, разница между var
, let
, const
, замыкания и другие концепции JavaScript. 01 Nov, 08:02
31 Oct, 14:36
31 Oct, 07:12
30 Oct, 06:52
29 Oct, 14:33
Cache::flexible()
, которая позволяет балансировать между производительностью и свежестью данных с помощью двухуровневой системы TTL (Time to Live). Обсуждаются сценарии применения метода, такие как рекомендации в интернет-торговле, работа с аналитикой, и рассматриваются примеры реализации. Также описаны ситуации, когда эту функцию не следует использовать.29 Oct, 07:29
Symbol.iterator
— это встроенный символ в JavaScript, который позволяет объектам быть итерируемыми с помощью цикла for...of
. Это важно для создания собственных итераторов и управления последовательным доступом к данным объекта.const iterableObj = {
items: ['apple', 'banana', 'cherry'],
[Symbol.iterator]() {
let index = 0;
return {
next: () => ({
value: this.items[index],
done: index++ >= this.items.length
})
};
}
};
for (const item of iterableObj) {
console.log(item); // 'apple', 'banana', 'cherry'
}
Symbol.iterator
.28 Oct, 08:11
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;
});
27 Oct, 09:17
Object.is()
?26 Oct, 14:15
assert()
окажется неверным?26 Oct, 08:50
25 Oct, 13:54
25 Oct, 08:06
24 Oct, 16:50
24 Oct, 12:50
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576 erid 2SDnjc7hFj9
24 Oct, 07:31
let
и const
. Также обсуждается, как всплытие влияет на выполнение кода, и рассматривается концепция "Временной мёртвой зоны" (TDZ) для let
и const
.23 Oct, 08:31
22 Oct, 17:15
UnauthorizedEmailProviders
для блокировки регистраций и обновлений email с временных доменов. Правило проверяет домен электронной почты с помощью списка запрещенных провайдеров, чтобы не допускать использования одноразовых адресов при регистрации на платформе.22 Oct, 13:15
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru erid 2SDnjeSXktB
22 Oct, 08:10
Object.getOwnPropertySymbols()
возвращает массив символов, которые являются свойствами указанного объекта. В JS символы — это уникальные идентификаторы, которые могут использоваться в объектах для создания скрытых свойств, не отображаемых при обычных обходах объекта. const sym1 = Symbol('first');
const sym2 = Symbol('second');
const obj = {
[sym1]: 'Первое значение',
[sym2]: 'Второе значение',
regularKey: 'Обычное свойство'
};
// Получаем все символы объекта
const symbols = Object.getOwnPropertySymbols(obj);
console.log(symbols); // [Symbol(first), Symbol(second)]
// Доступ к значению символа
console.log(obj[symbols[0]]); // 'Первое значение'
sym1
и sym2
, которые добавляются как свойства объекта obj
. Метод Object.getOwnPropertySymbols()
возвращает массив символов, позволяя получить доступ к их значениям.21 Oct, 07:40
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'); // Проверка на представление для обычного пользователя
}
20 Oct, 09:13
Object.freeze()
на удаление свойств объекта?19 Oct, 15:14
19 Oct, 06:52
18 Oct, 08:02
17 Oct, 14:36
17 Oct, 10:30
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru erid 2SDnjdPS7e3
17 Oct, 07:12
querySelector
и querySelectorAll
, добавление и удаление элементов, управление событиями через делегирование, а также различия между innerHTML
и textContent
. Это поможет лучше подготовиться к техническим собеседованиям, где проверяются фундаментальные знания DOM.16 Oct, 06:52
15 Oct, 16:00
array_find
, array_find_key
, array_any
и array_all
. Эти функции позволяют проще и удобнее проверять наличие элементов в массиве, получать ключи по условию и проверять элементы на соответствие заданным критериям. Приведены примеры использования каждой функции с объяснением, как они работают.14 Oct, 16:12
Object.preventExtensions(obj)
запрещает добавление новых свойств в объект obj
.const config = { apiEndpoint: '/api', timeout: 5000 };
Object.preventExtensions(config);
// Попытка добавить новое свойство
config.retryAttempts = 3; // Не будет добавлено
console.log(config.retryAttempts); // undefined
function createImmutableConfig(options) {
const config = { ...options };
Object.preventExtensions(config);
return config;
}
const appConfig = createImmutableConfig({ debug: true, version: '1.0.0' });
appConfig.newFeature = true; // Не будет добавлено
console.log(appConfig); // { debug: true, version: '1.0.0' }
14 Oct, 08:11
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;
}
});
13 Oct, 09:17
Symbol.species
влияет на методы класса-наследника?12 Oct, 14:15
$guarded
в модели Laravel?12 Oct, 08:50
11 Oct, 08:06
10 Oct, 16:00
10 Oct, 07:31
async
/await
для упрощения работы с асинхронностью. Статья включает практические примеры и решает проблему "Callback Hell".09 Oct, 08:31