![Mikhail Bukachuk](/img/default-banner.jpg)
- Видео 87
- Просмотров 96 677
Mikhail Bukachuk
Финляндия
Добавлен 6 сен 2013
Всем привет, меня зовут Михаил, я работаю уже более 20 лет PHP разработчиком, в данный момент занимаю лидовую позицию. На данном канале я буду выкладывать видео о PHP, Mysql, Linux, Symfony, Redis, PHPUnit для начинающих и специалистов любого уровня.
Если у вас есть какие то идеи по поводу темы роликов, вы также можете мне написать и возможно я смогу сделать ролик по вашей тематике, конечно это около веб и PHP в целом)
Вы также можете смело писать мне на email или в телеграм канал если у вас есть какие либо вопросы)
Если у вас есть какие то идеи по поводу темы роликов, вы также можете мне написать и возможно я смогу сделать ролик по вашей тематике, конечно это около веб и PHP в целом)
Вы также можете смело писать мне на email или в телеграм канал если у вас есть какие либо вопросы)
PHP Unit тестирование. Урок 5. Покрываем роутер юнит тестами с моками и стабами
Видео "Покрываем роутер юнит тестами с моками и стабами" посвящено написанию юнит тестов для маршрутизатора (роутера) в приложении. Основное внимание уделяется использованию моков и стабов для создания изолированных и контролируемых условий тестирования.
Установка PHPUnit: ruclips.net/video/YQHe1g3Ug8Q/видео.html
Дата провайдеры в PHPUnit: ruclips.net/video/vPdFXKDOUwk/видео.html
setUp и tearDown: ruclips.net/video/IIF-pwcNeoE/видео.html
00:00 Вступление и обзор маршрутизатора
01:00 Установка Phpunit с помощью composer
03:00 Первый запуск phpunit команды
05:00 Пишем первый unit тест метода Route::getPattern
07:30 Создаем data provider для тест метода
10:20 Тестируем метод getUri
13:00 Тестируем кла...
Установка PHPUnit: ruclips.net/video/YQHe1g3Ug8Q/видео.html
Дата провайдеры в PHPUnit: ruclips.net/video/vPdFXKDOUwk/видео.html
setUp и tearDown: ruclips.net/video/IIF-pwcNeoE/видео.html
00:00 Вступление и обзор маршрутизатора
01:00 Установка Phpunit с помощью composer
03:00 Первый запуск phpunit команды
05:00 Пишем первый unit тест метода Route::getPattern
07:30 Создаем data provider для тест метода
10:20 Тестируем метод getUri
13:00 Тестируем кла...
Просмотров: 170
Видео
Переменные среды env файлов Symfony фреймворка
Просмотров 214День назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob В этом видео более детально рассмотрим вопросы переменных сред файла .env. Также выясним, как мы можем трансформировать данные из env файлов. Также рассмотрим зачем нужны среды env test prod Что такое переменные среды и для чего они нужны. Примеры использования переменных среды в различных сценариях. Как Symfony использ...
Как определить страну и город пользователя по IP адресу
Просмотров 33414 дней назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob В этом видео рассмотрим пример определения страны и города посетителя сайта по его IP адресу. Для определения будем использовать бесплатную базу MaxMind и пакет PHP для чтения данных из этой базы 00:00 Где и как скачать базы Maxmind 01:10 Устанавливаем с помощью composer компонент geoip2/geoip2 01:20 Разбираемся с работ...
Создаем alias в bash Linux для быстрого запуска команд
Просмотров 10514 дней назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob В этом видео разберемся как делать алиасы в bash, зачем они нужны и как сделать, чтобы они сохранялись к следующему сеансу консоли. 00:00 Введение 00:18 Создаем наш первый alias в Linux bash консоли 00:34 Используем созданный алиас в консоли 00:52 Немного о команде history в Linux bash 01:27 Прописываем алиас в bash_rc ...
Маршрутизация роутинг запросов в PHP с использованием ООП
Просмотров 36621 день назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob Сегодня напишем маршрутизацию на PHP без привлечения фреймворков, но с использованием ООП и регулярных выражений. Напишем простейший пример роутинга с использованием объектно-ориентированного программирования. У нас будет класс маршрута, класс коллекции маршрутов, класс их сопоставления. 00:00 Разбираемся с принципом ра...
Аутентификация JWT в Symfony с помощью firebase/jwt
Просмотров 20421 день назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob В этом видео сделаем аутентификацию по JWT токену но без использования бандла LexikJWTAuthenticationBundle. Для кодирования и декодирования JWT возьмем пакет firebase/jwt и прикрутим его к Symfony. Разбемся как сделать свой класс аутентификации. Также немного поучимся как решать возникшие проблемы с Symfony. 00:00 Что б...
Базовые знания администратора Linux
Просмотров 1,2 тыс.28 дней назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob В этом видео кратко пробежимся по базовым операциям в операционных системах Linux на примере Debian/Ubuntu. Как подключиться к серверу Linux. Обзор файловой системы, переход по каталогам, права доступа файлов и каталогов. Использование sudo и su для операций суперпользователя Linux. Использование cat для просмотра файло...
Как правильно добавить или изменить колонку в большой таблице Mysql
Просмотров 17328 дней назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob Добавление или изменение колонок в большой таблице MySQL может быть деликатным процессом, особенно когда таблица содержит большое количество данных. Это руководство как сделать это правильно, какие проблемы могут возникнуть и как их можно решить. Рассмотрим использование Percona toolkit и поменяем тип колонки в большой ...
Создание и удаление связанных сущностей в Symfony / Doctrine
Просмотров 170Месяц назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob В этом видео добавим еще одну сущность к блогу, содержащую meta данные страницы блога. Научимся создавать вложенные формы, а также разберемся с настройками каскадных операций Doctrine с помощью параметров cascade persist и remove 00:00 Добавление сущности для мета данных страницы блога 02:00 Связывание сущностей Blog и ...
Как работают cookie и сессии в PHP
Просмотров 535Месяц назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob В этом видео подробно разберем механизмы работы COOKIE и SESSION в PHP. Узнаем зачем использовать cookie и сессии. Разберем основные их отличия, а также примеры использования. Использование безопасных флагов для cookie (HttpOnly, Secure). Настройка времени жизни сессий в зависимости от требований безопасности. Сделаем п...
Навигация по файлам в Linux с помощью Midnight commander
Просмотров 444Месяц назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob Midnight Commander (MC) - это мощный текстовый файловый менеджер для Unix-подобных систем, таких как Linux. MC предлагает удобный интерфейс для навигации по файловой системе, копирования, перемещения, удаления файлов и выполнения других операций. В этом видео показано, как эффективно использовать файловый менеджер Midni...
Аутентификация и авторизация с помощью JWT в Symfony PHP фреймворке
Просмотров 385Месяц назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob В этом видео мы переделаем механизм аутентификации и авторизации с помощью JWT в Symfony. Для этого воспользуемся готовым бандлом LexikJWTAuthenticationBundle. Установим данный Symfony bundle. Разберемся с его настройками и опробуем его в работе. 00:00 Что такое JWT токен 01:58 JSON логин в Symfony с помощью сессий для ...
Как подключиться к серверу Linux по SSH протоколу
Просмотров 2932 месяца назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob В этом видео мы разберем момент подключения к серверу Linux по протоколу SSH. Сначала сделаем это из Windows с помощью программы Putty и пароля, далее сгенерируем SSH private и public ключи и научимся ими пользоваться для подключения к серверу без пароля. Потом аналогично проделаем такую же операцию из Linux, если вы хо...
Логирование в Symfony PHP с помощью Monolog. Подключаем filebeat, elasticsearch и Kibana
Просмотров 5532 месяца назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob Видеоурок посвящен настройке и использованию системы логирования в Symfony с помощью Monolog, а также интеграции с инструментами Filebeat, Elasticsearch и Kibana для анализа и визуализации логов. Вот основные шаги и темы, которые могут быть освещены в видео: Введение в логирование с Monolog в Symfony: Обзор Monolog как ...
Делаем простой интернет магазин на PHP без ООП для начинающих
Просмотров 7083 месяца назад
Открытый канал в телеге - t.me/PHPnoob Чат взаимопомощи PHP - t.me/php_noob В этом видео сделаем простой интернет магазин на голом языке программирования PHP без ОПП с использованием базы данных mysql. Разберемся с тем, как работает PHP, как работают формы в PHP и как обрабатывать данные формы. Как реализовать простейший фильтр товаров на PHP. Научимся с нуля создавать базу данных mysql и табли...
Как сделать REST API на Symfony в PHP. Полный гайд для разработчиков backend
Просмотров 1,4 тыс.3 месяца назад
Как сделать REST API на Symfony в PHP. Полный гайд для разработчиков backend
Блог на чистом PHP. Урок 6. Покупаем домен и хостинг и выкладываем сайт в интернет
Просмотров 2813 месяца назад
Блог на чистом PHP. Урок 6. Покупаем домен и хостинг и выкладываем сайт в интернет
Symfony 6 курс. Урок 15. Создание и удаление связанных сущностей в Doctrine ORM
Просмотров 3323 месяца назад
Symfony 6 курс. Урок 15. Создание и удаление связанных сущностей в Doctrine ORM
Собираем свой MVC микрофреймворк на PHP из готовых пакетов в composer
Просмотров 4893 месяца назад
Собираем свой MVC микрофреймворк на PHP из готовых пакетов в composer
Symfony 6 курс. Урок 14. Пишем парсер в Symfony/Console и покрываем Unit тестами с mock объектами
Просмотров 5003 месяца назад
Symfony 6 курс. Урок 14. Пишем парсер в Symfony/Console и покрываем Unit тестами с mock объектами
Использование утилиты mysqldump для восстановления базы MYSQL
Просмотров 1653 месяца назад
Использование утилиты mysqldump для восстановления базы MYSQL
Блог на чистом PHP. Урок 5. Устанавливаем Websocket сервер на PHP и отправляем уведомления в браузер
Просмотров 6273 месяца назад
Блог на чистом PHP. Урок 5. Устанавливаем Websocket сервер на PHP и отправляем уведомления в браузер
Symfony 6 курс. Урок 13. Написание Unit тестов в Symfony фреймворке
Просмотров 3464 месяца назад
Symfony 6 курс. Урок 13. Написание Unit тестов в Symfony фреймворке
Блог на чистом PHP. Урок 4. Поля select и checkbox. Отправка почтовых уведомлений PHP.
Просмотров 5095 месяцев назад
Блог на чистом PHP. Урок 4. Поля select и checkbox. Отправка почтовых уведомлений PHP.
Symfony 6 курс. Урок 12. Использование событий (events) в Doctrine ORM
Просмотров 5495 месяцев назад
Symfony 6 курс. Урок 12. Использование событий (events) в Doctrine ORM
Тюнинг и оптимизация серверных настроек MYSQL
Просмотров 2596 месяцев назад
Тюнинг и оптимизация серверных настроек MYSQL
Блог на чистом PHP. Урок 3. Делаем админку. Постраничная навигация. Поля select и checkbox
Просмотров 6046 месяцев назад
Блог на чистом PHP. Урок 3. Делаем админку. Постраничная навигация. Поля select и checkbox
Блог на чистом PHP. Урок 2. Добавляем админку и комментарии, переезжаем на PDO MYSQL
Просмотров 6656 месяцев назад
Блог на чистом PHP. Урок 2. Добавляем админку и комментарии, переезжаем на PDO MYSQL
Symfony 6 курс. Урок 11. Symfony Messenger для обработки задач из очереди
Просмотров 8466 месяцев назад
Symfony 6 курс. Урок 11. Symfony Messenger для обработки задач из очереди
Блог на чистом PHP. Урок 1. Создание сайта блога на PHP без фреймворков и ООП для начинающих
Просмотров 2,5 тыс.6 месяцев назад
Блог на чистом PHP. Урок 1. Создание сайта блога на PHP без фреймворков и ООП для начинающих
Сасибо. Актуальные уроки. Очень хотелось курс по api platform
Спасибо за видео! Было бы хорошо, если код хорошо видно было бы???
@@akhmad_goytinski да, я попозже увеличил шрифт =)
А как лучше защитить сервер от вредоносных изображений при их загрузке? я сам недавно выбирал курсы по IT, рассматривал разные компании, но остановился на Skypro. Лично я столкнулся с проблемой выбора подходящей профессии и благодаря наставнику смог найти своего первого заказчика))
Михаил спасибо! Четкое видео, давно хотел понять для чего эти тесты нужны.
Хорошее видео! Спасибо
3:47 не нужно в автолоад тащить тесты, для тестов есть autoload-dev. Вы же на прод не будете деплоить тесты, так зачем они в автолоаде ?
@@evlampiy5673 в целом да здесь я видимо ошибся
То, о чем вы говорите на 2:27 это не модульные тесты, это функциональные или интеграционные (там не совсем из контекста понятно). Модульные тесты (юнит--тесты) -это то, о чем вы говорите в этом видео, когда тестируется один изолированный класс, которому вместо зависимостей подсовывают моки
@@evlampiy5673 это юнит тесты в моем понимании, вообще это холиварная тема, их называют кому как нравится и везде разные формулировки, по мне так модуль это группа классов, юнит - один класс. В целом по мне так не так важно как они называются, а как они реализованы=)
@@bukachuk_php Вы из питона пришли ? Это ведь там функциональные тесты почему-то называют модульными (юнит) тестами, благодаря джанге. В php стеке по этому поводу нет никакого разночтения - есть юнит-тесты, есть функциональные тесты
@@evlampiy5673не питоном так баловался очень давно, я просто давным давно читал за это но не в рамках только php а в общем, возможно поэтому каша в голове 😅
@@bukachuk_php Тут на самом деле все очень просто - "модуль" это прямой перевод английского "unit" и когда появились первые переводы изложения методологии тестирования, то поначалу "unit tests" так и переводили "модульные тесты", а потом в обиход вошел прямой англицизм "юнит-тест". Поэтому "модульные тесты" это эквивалент "юнит-тесты"
@@evlampiy5673но вообще unit переводится не модуль, а составная часть, единица, элемент. Модуль по английски module, и внимание на описание модуля на английском, each of a set of standardized parts or independent units that can be used to construct a more complex structure, such as an item of furniture or a building. "ships are now built in modules rather than built in a whole from the base up" То есть Модуль состоит из юнитов
Отличное видео урок по тестированию кода. Хорошо что для теста использовался свой рабочий код и можно просмотреть логику как его тестировать. Было полезна информация по использованию моков для более сложной логики, а не просто создать один мок-объект без методов.
Спасибо 🙏
Михаил спасибо, как никогда это очень актуально! 🎯
Спасибо огромное
Спасибо! А можно ещё видео про переход с 5.7 на 8 версию?
Спасибо, за ваши усилия по созданию видео на канале, полезно! Планируете про архитектуру записать видео, например микросервисная архитектура на примере symfony либо другого фреймворка ?
круто
спасибо 🙏
Спасибо за контент!
А есть ли смысл тогда вообще использовать Memcached если redis такой крутой) Попадались ли тебе проекты с Memcached в проде?
Давно использовал memcache когда не было редиса. В целом redis мощнее по функционалу, memcache просто хранилище ключ => строка, а Redis может вместо строки хранить и списки и объекты итд, что лучше. Memcache хорошо подходит для больших значений, немного лучше работает с распределением памяти, но обычно это не критично, поэтому выбирают Redis. Тут можно почитать более детально stackoverflow.com/questions/10558465/memcached-vs-redis
пришлось чутка повозиться с инсертами в базу не знал как это сделать используя pdo и биндинг, думаю еще буду пересматривать и розбираться лучше. ps. чёто сложно уже становиться))
Спасибо Михаил!
Да Михаил это очень большая тема с классом reflection, как и упомянутый dependency injection di так и получение свойств и методов классов, тема очень большая особенно ее любят современные фреймворки.
О, круто!
Я такую же историю делал с git log - чтобы можно было удобно дерево выводить
оо наконецто настрою автообновление сертификатов на сервере))
не совсем понял что делает parent:: можете помочь разобраться? Мы модифицируем поведение класса Command?
@@nikfill-ff9hz вызываем метод родительского класса, мы расширяем функционал родительского, сначала вызываем родительский метод потом дописываем свой функционал
Получаться приватные методы не такие и приватные, если хорошо знаешь php ;D
Так вот как эта магия работает)) А сколько можно сэкономить если реализовать на чистом js? Например у меня весь бэкенд это две формы зачем мне подключать целую библиотеку. Или это слишком геморно?
@nikfill-ff9hz проще библиотеку тк она решает много проблем, например той же кроссбраузерности, а на чистом js это ложится на вас
так а зачем тогда использовать сторонние библиотеки если в php уже есть всё подключив один модуль?
@@nikfill-ff9hz они делают этот процесс проще, меньше кода
Спасибо базированая база)) Я бы очень обрадовался если появился видосик в дополнение как работать с конфликтами правильно. Постоянно стресс если чёто ломаеться в гите...
запустил. настройки сделал согласно указаниям, хотя и так нормальные были. практически не заметил разницы в работе. сервер перед этим год отработал.
@@romanmed9035 нагрузка может небольшая, inno db настройки точно помогают, размер пула
@@bukachuk_php спасибо. непонятно то что иногда провалы бывают. сервер арендованный в облаке.
@@romanmed9035 slow log включите поставите 5 секунд, возможно иногда стартуют запросы без индексов и грузят сервер кратковременно, этот лог может помочь их выявить
@@bukachuk_php спасибо. вот такого не подумал.
отличный урок! Очень помогло разобраться с тем чертополохом, который я развел в файле до этого😁
Наверное самый удобный язык программирования для работы с датами почти с коробки)
@@nikfill-ff9hz я думаю нет, раньше кстати не было этих классов, в других языках тоже есть
самый лучший менеджер пакетов который я видел)
при попытке генерации пары ключей вылезает такая ошибка In GenerateKeyPairCommand.php line 143: error:80000003:system library::No such process в чем может быть проблема? на стаковерфлоу похожую проблему нашёл, там её решили следующим образом: вручную генерится приватный ключ: openssl genrsa -out config/jwt/private.pem и публичный: openssl rsa -in config/jwt/private.pem -pubout > config/jwt/public.pem мне это тоже не помогло (возможно я в этом моменте что-то не так сделал) хотя openssl в php.ini у меня включен
github.com/lexik/LexikJWTAuthenticationBundle/issues/842 проверьте версию PHP там было вроде какая-то проблема, плюс проверьте установлен ли openssl в этом треде почитайте там вроде причина в версиях
Супер видео!
Хотелось бы ссылку на репозиторий со стартовыми данными проекта, не только готовый проект
неплохо было бы показать как использовать вит для сборки фронтенда, в том числе для перехода на него с енкора при использовании реакта.
Почему нету видео по laravel?
Надо будет надо))
спасибо 🙏
Круто спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Огромное спасибо за уроки, Михаил, свежие и подробные пособия по Симфони на русском языке!
Интересно как писали код без неймспейсов)) Походу он вообще не поддерживаемый.
Они появились в версии 5.3.0, но в то время поддержка ООП была очень скудная и большинство кода было процедурным, даже не помню как оно было без них))
Поставил плагин в vscode который форматирует по PSR после сохранения файла тож удобненько.
Можно еще поставить pre-commit hook в github и туда прикрутить github.com/PHP-CS-Fixer/PHP-CS-Fixer чтобы он делал это автоматом перед каждым коммитом, его кстати возможно прикрутить к VSCode, к PHPStorm точно можно
@@bukachuk_php я совсем забыл про эту опцию)
Михаил, спасибо Вам за понятное и внятное объяснение
А если нам в классе, который наследуется от абстрактного, нету реализации (код еще недописан) методов которые являються обязательными, можно сделать какую то заглушку временную или как это работает?
Можно сделать пустой метод по идее, тк его реализация обязательна
На один шаг ближе к пониманию ООП)
Супер, сколько еще будет уроков?
Думаю будет много))
Добавил кнопочки входа и выхода из админки используя знания из 13 урока заодно повторил закрепил)) Я так понимаю файл config.php мы не пушим в репозиторий? p.s. спасибо что есть bootstrap
Обычно конфигурацию не пушат в репозиторий и не хранят в репозитории, это конечно совсем примитивная манера программирования, но в целом подходы одинаковые. Обычно найстроки хранятся либо на сервере либо в специальном хранилище, откуда их достают при развертывании приложения. Тут можно почитать подробнее 12factor.net/ru/config
спасибо 🙏
спасибо 🙏
спасибо 🙏
Супер. Можете снять пожалуйста в продолжение к этому уроку как можно развернуть простенькое окружение для учёбы используя докер.