Заметки разработчика
Open in Telegram
Заметки о Frontend, Backend и немного DevOps. В основном о #PHP, #Laravel, #JavaScript, #HTML, #CSS, тестировании и настройке серверов. https://www.dev-notes.ru @snakenf
Show more463
Subscribers
No data24 hours
-37 days
+130 days
Posts Archive
assertRedirectBack() портирован в Laravel 11
Graham Campbell портировал TestResponse::assertRedirectBack, добавленный в Laravel 12.13 в Laravel 11:
$testResponse->assertRedirectBack();
👩💻 Подробности см. в Pull Request #55780.
📱 @dev_notes_ru
#Laravel #Laravel11В Query Builder добавлен
reorderDesc()
Rihulfa Akbar добавил в конструктор запросов метод reorderDesc(), являющийся сокращением для добавления в запрос условия сортировки по убыванию:
// использование reorder()
$this->reorder($column, 'desc');
// reorderDesc()
$query->reorderDesc($column);
👩💻 Подробности см. в Pull Request #55885.
📱 @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
) {}
}
👩💻 Подробности см. в Pull Request #55904.
📱 @dev_notes_ru
#Laravel #Laravel12Агрегатные функции SQL
В статье мы рассмотрим наиболее часто используемые агрегатные функции SQL, их синтаксис, практические примеры и способы оптимального использования в запросах.
🖥 Читать статью
📱 @dev_notes_ru
#DataBase #SQL
Каст модели AsUri
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();
👩💻 Подробности см. в Pull Request #55909.
📱 @dev_notes_ru
#Laravel #Laravel12Зачем нужны логические свойства CSS
Сегодня я хотел бы поговорить о логических свойствах CSS — новом (и, возможно, более эффективном) способе определения свойств, которые по своей природе являются направленными.
🖥 Читать статью
📱 @dev_notes_ru
#Frontend #CSS
CSS `if()`: новая функция условной логики доступна в Chrome 137+
CSS с каждым днем превращается в настоящий «язык программирования». С появлением новых возможностей, таких как CSS переменные, функция `calc()`, псевдоклассы `:has()` и `:is()`, а также универсальные `@media` запросы, CSS упрощает создание сложных стилей и макетов.
В CSS появилась новая функция
if(), пока доступная только в Chrome 137 и выше. Это первый шаг к условной логике прямо в стилях.
🖥 Читать статью
📱 @dev_notes_ru
#Frontend #CSSПреобразуйте исключения CSRF mismatch в исключения валидации для улучшения пользовательского опыта.
Поскольку исключения валидации обычно генерируют ответ редиректа, токен CSRF должен автоматически обновляться, чтобы пользователь мог повторить попытку. 👍
📱 @dev_notes_ru
#Laravel #CSRF #tips
Вместо добавления множества файлов в
.gitignore. Мы, просто, игнорируем всё. Отслеживаемые файлы необходимо добавлять вручную с помощь. git add -f myfile
📱 @dev_notes_ru
#jokeПроверка существования представления в Laravel
Если вы работаете с представлениями в Laravel напрямую и нужно заранее проверить, существует ли представление, вот как это сделать.
Это очень просто! Просто используйте метод
exists класса View. В данном примере используется хелпер view.
if (view()->exists('some.view')) {
// ...
}
Учтите, что some.view соответствует файлу /some/view.blade.php. Этот метод работает с точечной нотацией так же, как и при рендеринге представлений.
📱 @dev_notes_ru
#Laravel #View #tipsОтключение событий при создании Eloquent моделей
При тестировании часто возникает необходимость создавать записи через модель без запуска связанных событий. Сделать это очень просто с помощью метода
createQuietly.
Пример использования со стандартной моделью:
$user = User::createQuietly([
'name' => 'Mabel',
'email' => 'mabel@codecourse.com'
]);
Метод createQuietly не запускает никакие события, поэтому обработчики в наблюдателях моделей не сработают.
Особенно удобно при тестировании с фабриками:
User::factory(3)->createQuietly();
Этот код создаст трёх пользователей без генерации событий.
Другие варианты "тихого" создания:
- createOneQuietly() - для создания одной записи
- createManyQuietly() - для массового создания
Эти методы помогают ускорить тесты и избежать побочных эффектов при работе с моделями.
📱 @dev_notes_ru
#Laravel #Eloquent #tips👩💻 Мемоизация кэша в Laravel: Как работает `
Cache::memo()` и зачем он нужен
Как использовать мемоизацию кэша в Laravel для повышения производительности и сокращения сетевых обращений к Redis, Memcached и другим хранилищам.
Даже если вы используете кэш, Laravel каждый раз обращается к внешнему хранилищу. Это может быть Redis или Memcached — и каждый такой запрос может занимать лишние миллисекунды. В больших приложениях это превращается в серьёзную нагрузку.
🖥 Читать статью
📱 @dev_notes_ru
#Laravel #Cache