OneCode
1.38K subscribers
634 photos
64 videos
3 files
535 links
Full Stack на PHP, Laravel и всё, что с этим связано.
YouTube: https://www.youtube.com/@onecode_blog
Download Telegram
Лайфхак для TinkerWell

Ни раз уже писал про тинкервел, который, позволяет писать код на PHP внутри нашего приложения на Laravel, сразу выполнять этот код, тут же видеть результат и всё это можно по SSH на сервере - реально бомба!

Недавно с коллегами случайно обнаружили прикольную фишку. Суть в том, что если выделить кусок кода и нажать Play (запустить), то выполнится именно этот выделенный код.

На скрине я написал скрипт для обновления заявок на доставку. Но прежде, чем его запустить я хочу посмотреть сколько их там.

Для этого выделил нужный кусок кода, запустил и увидел. До цикла foreach дело не дошло - реально удобная тема.

https://tinkerwell.app

#tools #tinker #laravel
👍3
От подмастерья к ремесленнику

Книга Тейлора Отвела - разработчика Laravel.

Написана почти 10 лет назад - 2013 год, но уверен каждый найдёт для себя что-то полезное.

Я прочитал уже половину, до конца недели закончу. Можно читать просто по 1 главе в день.

Читать можно через Яндекс.Переводчик - там можно переводить PDF-файлы.


Книга в следующем посте 👇

#book #laravel #taylor
👍3
Шпаргалка по консольным командам Laravel.

Рекомендую хотя бы просто пробежаться по списку команд и изучить те, которые не знаешь!

https://artisan.page

#laravel #artisan
👍6
Просмотр логов в Laravel

Тестирую бесплатный пакет для просмотра логов.

Первое впечатление - нравится! 🙂

https://arunas.dev/log-viewer-for-laravel

Приятно работать, когда есть качественные готовые решения 😍

#laravel #log #logs #logging
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Пакет для автоматического создания и удаления дополнительных серверов

Например, наше приложение работает с разной нагрузкой - днём она высокая, а ночью маленькая.

Или у нас есть очереди, которые обрабатывают разное кол-во задач. То густо, то пусто 😃

Пакет будет каждую минуту запускать функцию, в которой мы говорим сколько серверов нужно в текущий момент.

Это позволяет сильно экономить на серверах.

Получается такой мини-кубернетис с автоматическим горизонтальным масштабированием.

Серверы создаются из заранее подготовленного образа. Прикольная тема, если что будем иметь ввиду.

https://spatie.be/docs/laravel-dynamic-servers/v1/introduction

#laravel #server #servers
👍5
Laravel + Inertia + Vue (React)

Пошаговая инструкция по разработке простого проекта на современном стеке.

https://bootcamp.laravel.com

#laravel #inertial #bootcamp
🔥9👍3
Изменение состояния сущности

Изображения (скрины) отправлю в следующем сообщении.

Наши модели и база данных содержат поля, отвечающие за состояние сущности.

Например, пользователь может быть заблокирован или РАЗблокирован.

Способ 1

В этом случае можно добавить в таблицу
users
поле
blocked
с типом
boolean
.

Тогда админ сможет блокировать пользователя, переключая чекбокс в админке.

Этот пример я накидал на первом изображении 👇

Проблема

Рано или поздно админ спросит - а когда был заблокирован этот юзер?

Начинающий разработчик скорее всего пожмёт плечами и скажет, что таких данных нет.

А опытный разработчик заглянет в логи и ответит на поставленый вопрос.

Если, конечно, значения поля НЕ менялось напрямую в базе данных 😁

Решение

В любом случае ничего страшного НЕ произойдёт, но нормальный разработчик сделает выводы, что в следующий раз лучше сразу хранить дату и время блокировки юзера.

(Способ 2)

Для решения этой задачи, можно вместо
boolean
для поля
blocked
использовать дату и время, например
timestamp
с возможностью НЕ указывать значение (nullable).

В таком случае мы получаем всё тоже самое (переключатель ```null/datetime```) + имеем дату блокировки пользователя.

Этот пример показан на втором изображении 👇

Признавайся, делал так?

Проблема

Однако этот способ тоже НЕ идеальный, потому что здесь есть дата блокировки пользователя, НО нет даты его РАЗблокировки 😁

Получается, что задача решена наполовину, а для нас (хацкеров) это НЕприемлемо.

Решение

Логичное решение - добавить отдельное поле для хранения времени изменения переключателя.

Способ 3

Этот вариант сочатает в себе оба предыдущих способа и, наверно, является наиболее универсальным.

Теперь главное НЕ забыть обновлять дату и время ```blocked_at``` в момент изменения поля
blocked
.

Внимание на третье изображение 👇

Проблема

Но помимо поля
blocked
у юзера есть много других полей.

И тут возникает логичный вопрос - добавлять дополнительное поле с временем изменения к каждому из полей юзера?

То есть по-хорошему, мы хотим знать какие поля менялись? когда менялись? и значения ДО и ПОСЛЕ?

Решение

Начинающий разработчик, возможно, действительно начнёт добавлять отдельные поля.

Хотя бы для некоторых свойств пользователя (самых важных).

Но мы же не такие? Мы будем думать над универсальным "оружием".

А кто-то пойдёт гуглить готовое решение. Лентяй 🫵

Способ 4

Все выходные мы думали над решением и есть же!

1. Можно создать отдельную модель, например
Change
(изменение).

2. Привязываем эту модель к любой другой модели нашего приложения (через трейт HasChanges).

3. Указываем какие поля мы хотим отслеживать (через абстрактный метод в трейте).

4. На основе событий модели (created, updated) наш трейт автоматически записывает историю в базу данных (таблица changes).

5. Мы в любой момент видим лог всех изменения наших записей: дату, время, значения ДО и ПОСЛЕ.

Изображение НЕ прилагаю. Предлагаю тебе самому подумать на решением 😝

Итог

Подобное решение иногда раально упрощает жизнь.

Особенно, если пользователь заявляет, что его аккаунт взломали 😃

Мы можем увидеть: когда был вход, когда изменился email, пароль и тд.

Ставь лайк, если полезно! Может запишем видео на эту тему.

ПС: если руками лазить в базу, то тут ничего не поможет 😁

ППС: если ооочень хочется, то можно 😉

#php #laravel #db #bool #boolean
🔥4
Laravel Venture

Laravel из коробки даёт крутую систему очередей, но иногда возникают более сложные задачи.

Например, создание цепочек последовательных действий в очереди:

- Загрузить видео на сервер
- Оптимизировать видео
- Транскрибировать видео
- Перевести на другие языки
- Уведомить подписчиков
- И тд

Пакет Laravel Venture позволяет создавать мощную систему асинхронных задач в очереди.

Судя по документации всё довольно просто, поэтому имеем в виду этот полезный инструмент в арсенале современного веб-ремесленника 🙂

https://laravel-venture.com

#laravel #queue #venture
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍3
Laravel за 100 секунд

За пару минут конечно невозможно рассказать о всей мощи ларки, но лайк поставить можно!

https://youtu.be/rIfdg_Ot-LI

#laravel #100sec
👍6
Laravel Eloquent Strict Mode

Добавлен строгий режим для моделей, который будет выкидывать исключения:
- При попытке обратится к отношению без его явной предварительной загрузки.
- При попытке установить НЕ заполняемый атрибут.
- При попытке получить НЕ существующий атрибут.

https://laravel.com/docs/9.x/eloquent#configuring-eloquent-strictness

#laravel #strict
👍2
Laravel Mailbook

Полезный пакет для просмотра email-писем.

- Графческий интерфейс с выбором писем
- Автоматический откат базы, если для просмотра письма нужны временные данные
- Просмотр адаптивной версии письма
- Разные варианты одного письма
- Поддержка мультиязычности

https://github.com/Xammie/mailbook

Подпишись: @onecode_blog

#laravel #mail
👍11