WebCraft - ремесло веб разработки – Telegram
WebCraft - ремесло веб разработки
5.52K subscribers
2.16K photos
322 videos
2 files
352 links
Интересуешься php , js , css , html , Laravel , Vue ? Этот канал для тебя

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

Купить рекламу: https://telega.in/c/web_craft
Download Telegram
Проверка статуса пользователя

Для проверки того, что пользователь не аутентифицирован, часто используется конструкция \!Auth::check(). Хотя это работает, отрицание может незначительно снижать читаемость кода.

В Laravel для этой же цели существует более выразительный метод guest(). Он возвращает true, если пользователь является гостем, делая код семантически более понятным и легким для восприятия.

<?php

// Задача: показать блок с кнопками входа и регистрации
// только для неавторизованных пользователей (гостей).

// Распространенный подход с отрицанием:
@if (!Auth::check())
<a href="/login">Войти</a>
<a href="/register">Регистрация</a>
@endif

// Более читаемый подход с методом guest():
@if (Auth::guest())
<a href="/login">Войти</a>
<a href="/register">Регистрация</a>
@endif


👉 @web_craft | #laravel
1👍6👎3
Асинхронная инициализация модулей

Раньше асинхронные операции на верхнем уровне модуля требовали сложных конструкций. С появлением top-level await в ES-модулях (стандарт ES2022) стало возможным использовать await вне async-функций. Это позволяет модулю дождаться выполнения асинхронной задачи, прежде чем его код будет доступен для импорта в других модулях. Данный механизм упрощает инициализацию ресурсов или загрузку конфигурации.

// file: config.js
// Имитируем асинхронное получение конфигурации
const response = await fetch('/api/config');
const config = await response.json();

// Экспортируем данные только после их получения
export default config;

// file: main.js
// Импорт модуля с top-level await
import config from './config.js';

// Этот код выполнится только после того,
// как промис в config.js будет разрешен.
console.log('Конфигурация загружена:', config);

function startApp() {
// Логика запуска приложения с использованием config
}

startApp();


👉 @web_craft | #frontend
2👍1
Декларативные запросы по дате в Laravel

Запросы для фильтрации по датам часто загромождаются конструкциями с Carbon или ручными сравнениями. Статья разбирает новые декларативные методы, такие как whereNowOrPast и whereFuture, которые упрощают подобные выборки. Использование данных хелперов делает код более чистым и выразительным.

👉 @web_craft | #laravel
👍31
Какая документация в вашем проекте самая «чувствительная»?

👍 – Та, которую никто не обновлял 5 лет.

❤️ – Мой собственный код.

🤔 – У вас есть документация?

👉 @web_craft |#юмор
🤔91👍1
👩‍💻 Всем программистам посвящается!

Вот 17 авторских обучающих IT каналов по самым востребованным областям программирования:

Выбирай своё направление:

👩‍💻 Frontend — t.me/frontend_ready
📱 JavaScript — t.me/javanoscript_ready
👩‍💻 Backend — t.me/backend_ready
📱 GitHub & Git — t.me/github_ready
👩‍💻 Python — t.me/python_ready
🤔 InfoSec & Хакинг — t.me/hacking_ready
🖥 SQL & Базы Данных — t.me/sql_ready
🤖 Нейросетиt.me/neuro_ready
👩‍💻 C/C++ — https://news.1rj.ru/str/cpp_ready
👩‍💻 C# & Unity — t.me/csharp_ready
👩‍💻 Java — t.me/java_ready
👩‍💻 Linux — t.me/linux_ready
🖼️ DevOpst.me/devops_ready
📖 IT Книги — t.me/books_ready
👩‍💻 Весь IT — t.me/it_ready
👩‍💻 Bash & Shell — t.me/bash_ready
🖥 Design — t.me/design_ready

📌 Гайды, шпаргалки, задачи, ресурсы и фишки для каждого языка программирования!
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Pill Loader

Анимированный лоадер с пилюлей на чистом CSS.

👉 @web_craft | #frontend
👍31
Про IT в 2025 году

Раздутые зарплаты, сомнительное качество работы, фейковые резюме и требования работать по 2-3 часа в день являются реалиями современного IT. Статья представляет собой трезвый и критический взгляд на индустрию от разработчика с 20-летним опытом. Автор анализирует, как рынок дошёл до текущего состояния и прогнозирует, как он будет меняться в ближайшем будущем.

👉 @web_craft | #собес
🤔3
Какая «оптимизация» в итоге обошлась вам дороже всего?

👍 – «Давай пока без тестов, потом напишем».

❤️ – «Зачем нам бэкапы? У нас надежный сервер».

🤔 – «Я напишу свой фреймворк, он будет быстрее».

👉 @web_craft |#юмор
👍10🤔5
О странностях Javanoscript

Все знают о причудах == в JavaScript, но в языке есть и более коварные особенности, которые редко обсуждаются. Статья разбирает именно такие нетривиальные моменты. Рассматривается разное поведение eval, хитрый захват переменных в циклах, разреженные массивы и сложности перебора строк с Unicode.

👉 @web_craft | #frontend
👍2
Условие вывода атрибута

В каком случае директива @checked выводит атрибут checked?

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

👉 @web_craft | #laravel
2
Определение окружения

Какое свойство браузера помогает определить операционную систему пользователя?

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

👉 @web_craft | #frontend
2
Какое свойство браузера помогает определить операционную систему пользователя?
Anonymous Quiz
44%
Navigator.platform.
40%
Navigator.userAgent.
9%
Window.os.
7%
Document.system.
2
Фильтрация записей по времени

Фильтрация данных по текущей дате часто требует передачи now() в запросы, что может выглядеть громоздко. Особенно при сложных условиях, объединяющих прошлое и будущее.

В Laravel существуют элегантные методы whereDate(), whereNowOrPast() и whereFuture(), которые упрощают такие запросы. whereNowOrPast выбирает записи с датой в прошлом или настоящем, а whereFuture — только с датой в будущем. Это делает код более читаемым и декларативным.

<?php

use App\Models\Event;

// Задача: получить все прошедшие и будущие события отдельно.

// Стандартный подход:
$pastEvents = Event::where('starts_at', '<=', now())->get();
$futureEvents = Event::where('starts_at', '>', now())->get();

// Подход с новыми методами:
$pastEventsClean = Event::whereNowOrPast('starts_at')->get();
$futureEventsClean = Event::whereFuture('starts_at')->get();


👉 @web_craft | #laravel
👍71
Безопасные динамические шаблоны

При создании регулярного выражения из динамической строки возникает проблема специальных символов. Символы вроде . или + имеют особое значение. Для их корректной обработки предназначен статический метод RegExp.escape(). Он экранирует все спецсимволы в строке, подготавливая её для безопасного включения в шаблон. Данный метод является кандидатом в стандарт ECMAScript (Stage 3).

// Строка от пользователя, которую нужно найти
const userQuery = 'node.js (v18+)';

// Неправильный подход: спецсимволы ломают шаблон
const brokenRegex = new RegExp(userQuery);
// Получится /node.js (v18+)/, что ищет совсем не то, что нужно.
console.log(brokenRegex.test('I use node.js (v18+)')); // false

// Правильный подход с использованием предложенного метода
const escapedQuery = RegExp.escape(userQuery);
// escapedQuery станет 'node\\.js \\(v18\\+\\)'

const correctRegex = new RegExp(escapedQuery);
console.log(correctRegex.test('I use node.js (v18+)')); // true


👉 @web_craft | #frontend
2👍1
Автоматизация анонимизации данных для GDPR в Symfony

Процесс анонимизации пользовательских данных для GDPR-запросов часто выполняется вручную и подвержен ошибкам. Статья предлагает решение для автоматизации этой задачи в Symfony. В ней разбирается паттерн с использованием PHP-атрибутов для разметки персональных данных, что позволяет запускать анонимизацию для связанных сущностей одной консольной командой.

👉 @web_craft | #php
👍3
Что вас добило?

👍 – C# на .php.

❤️ – PHP на .asp.

👉 @web_craft |#юмор
14👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Fancy border style button

Кнопки с анимированной рамкой на чистом CSS.

👉 @web_craft | #frontend
2👍1
Про IT в 2025 году

Раздутые зарплаты, сомнительное качество работы, фейковые резюме и требования работать по 2-3 часа в день являются реалиями современного IT. Статья представляет собой трезвый и критический взгляд на индустрию от разработчика с 20-летним опытом. Автор анализирует, как рынок дошёл до текущего состояния и прогнозирует, как он будет меняться в ближайшем будущем.

👉 @web_craft | #собес
👍3
Ваш проект движется так же уверенно?

👍 – Один в один.

❤️ – У нас ещё тестировщик сбоку толкает.

👉 @web_craft |#юмор
11👍3🔥1
Как передать параметры в addEventListener

Попытка передать параметры в обработчик addEventListener напрямую часто приводит к тому, что функция выполняется сразу, а не по событию. Статья наглядно объясняет, почему так происходит, и разбирает правильные подходы. Рассматриваются чистые решения с использованием анонимных функций и метода .bind() для корректной передачи данных.

👉 @web_craft | #frontend
3