Тёмный

Создание собственного PHP MVC фреймворка на ООП. 11. Обработка ошибок 

Андрей Кудлай
Подписаться 6 тыс.
Просмотров 329
50% 1

В этом уроке мы напишем метод save() модели, который позволит просто и лаконично сохранять атрибуты модели в БД. Также мы подключим библиотеку для работы с ошибками, которая позволит показать красивую страницу с информацией об ошибке или же залогировать ошибку.
Исходники к уроку - github.com/mat...
==========================================
💖 Поддержка канала
www.donational...
4731 2196 5549 6408 (ПриватБанк)
matroskin978@gmail.com (PayPal)
TXGoBr7UrwRUYx7FpzbiG8znkgC6fhwtEF (USDT TRC20)
410014621600849 (ЮMoney)
===============================================
Мои курсы на Udemy
Не получается приобрести курс или нужна скидка - обращайтесь. Решим :)
Курс "PHP 8. ООП. Создание собственного PHP MVC фреймворка":
www.udemy.com/...
Курс по созданию интернет-магазина и веб-приложений в Telegram - www.udemy.com/...
Курс по созданию собственного шаблона интернет-магазина для OpenCart 3 - www.udemy.com/...
Курс по PHP - www.udemy.com/...
СУБД MySQL и язык запросов SQL. Теория и практика - www.udemy.com/...

Опубликовано:

 

24 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 37   
@matroskin978
@matroskin978 4 дня назад
💖 Поддержка канала www.donationalerts.com/r/matroskin978 4731 2196 5549 6408 (ПриватБанк) matroskin978@gmail.com (PayPal) TXGoBr7UrwRUYx7FpzbiG8znkgC6fhwtEF (USDT TRC20) 410014621600849 (ЮMoney) =============================================== Мои курсы на Udemy Не получается приобрести курс или нужна скидка - обращайтесь. Решим :) Курс "PHP 8. ООП. Создание собственного PHP MVC фреймворка": www.udemy.com/course/php-8-framework/?referralCode=1D29D8356C893C7889B3 Курс по созданию интернет-магазина и веб-приложений в Telegram - www.udemy.com/course/telegram-bots-web-apps/?referralCode=A574DFE059CF9FF4E002 Курс по созданию собственного шаблона интернет-магазина для OpenCart 3 - www.udemy.com/course/opencart-3/?referralCode=96BAF7C78DF57D6A90CA Курс по PHP - www.udemy.com/course/php-8-ua/?referralCode=4DAAEA9CF6ADF447D879 СУБД MySQL и язык запросов SQL. Теория и практика - www.udemy.com/course/mysql-sql/?referralCode=B6655F05D32032D80C0B
@AndriiP86
@AndriiP86 4 дня назад
Як завжди все дуже інформативно. Чекаю нових уроків.
@НиколайЗолотаревский-о3е
Супер, продолжается... 11 - это что-то! Спасибо Андрей!
@matroskin978
@matroskin978 3 дня назад
@@НиколайЗолотаревский-о3е пожалуйста 😉
@phpstudy8625
@phpstudy8625 4 дня назад
Супер !!! Еще бы доску обьявлений по типу а ля Авито было бы круто !!!
@StasKantor
@StasKantor 3 дня назад
Спасибо огромное за твои уроки
@feelingfun5149
@feelingfun5149 4 дня назад
Как всегда отличное обучающее видео! 👍
@matroskin978
@matroskin978 4 дня назад
Спасибо)
@mr_riabov
@mr_riabov 3 дня назад
Дякую, як завжди дуже корисно 👍 Як ідея: було б круто ще реалізувати варіант реєстрації не по email, а по номеру телефону, з підтвердженням номеру через SMS, чи месенджери. Думаю, це особливо корисно буде для інтернет магазинів ) Ну і не втомлююсь повторювати за пошук та кешування 😅
@matroskin978
@matroskin978 3 дня назад
Будь ласка) Реєстрації за номером телефону не буде, тому що не зустрічав жодного безкоштовного сервісу, які надають API для відправки SMS. Через месенджери теж не вийде. Для цього потрібен бот, з яким користувач має спочатку розпочати бесіду і лише після цього бот зможет щось надіслати користувачу. Насправді жодного разу не зустрічав реєстрації з використанням месенджерів, навряд це гарна ідея 😏
@progerlife6690
@progerlife6690 4 дня назад
Огонь!
@Osgard-w6y
@Osgard-w6y 3 дня назад
Дякую!
@agent.moriarty
@agent.moriarty 4 дня назад
Спасибо за уроки! хотелось бы увидеть правильную реализацию фильтрации (товаров или чего либо), на laravel или ваше собственное решение
@statistic-py6ip
@statistic-py6ip 3 дня назад
А при чем тут ларавел? Андрей в начале курса ещё сказал, а собственное решение скорее всего будет, раз уж это будет ИМ, у всех современных магазинов фильтрация есть по цене, характеристикам, атрибутам и т.д. Надеемся на то, что Андрей покажет нам на примере как это реализовать, а дальше сами...
@agent.moriarty
@agent.moriarty 2 дня назад
@@statistic-py6ip при том что на канале есть и другие рубрики, может автору интереснее сделать на ларавел
@statistic-py6ip
@statistic-py6ip День назад
@@agent.moriarty Да есть, не хочется отвечать за него, что ему интересней, но этот курс вроде посвящен созданию собственного фреймворка....
@ВадимШац-й1ж
@ВадимШац-й1ж 2 дня назад
Спасибо за науку. 1. Большая просьба в рамках проекта осветить вопросы мультиязычности и возможности смены темы сайта (например: темная/светлая) 2. Вопрос: В классе View вы реализовали метод renderPartial($view, $data = []), который, как я понимаю, позволяет "собирать" представление по частям. Т.е. делаем render() основного представления (напр. Home.php), а затем из него можно вызывать набор renderPartial() для разных блоков (напр. контент, рекламный, информационный и др.блоки), тем самым собирая его наполнение. Каким образом можно организовать передачу данных в эти вложенные блоки (параметр $data)? Ведь у нас данные, сформированные в контроллере, доступны только в головном методе render() после метода extract. (надеюсь понятно объяснил :)
@matroskin978
@matroskin978 2 дня назад
@@ВадимШац-й1ж пожалуйста) 1. Мультиязычность планировал. Смена цветовой схемы - это css, т.е. к фреймворку отношения не имеет по сути. 2. У метода renderPartial() свой extract. Поэтому любой массив, который подается параметром, во включаемом представлении будет доступен в виде переменных. Все, как и с видами. В каком-то из уроков предыдущих наверняка показывал, раз метод есть, сейчас не вспомню. Метод идеально подходит для вывода, к примеру, шаблона статьи или товара в цикле. У нас есть условный многомерный массив $products, крутим его в цикле foreach и на каждой итерации в метод renderPartial передаем массив одного продукта. Внутри подключаемого вида будут доступны переменные $title, $price и т.п. Попробуйте, должно получиться)
@Monax-go6vq
@Monax-go6vq 3 дня назад
Кстати нет необходимости делать $field_keys = array_keys($this->attributes), ведь это есть $this->fillable по факту Просто сразу $fields = array_map(fn($field) => "`{$field}`", $this->fillable); Мы же можем быть уверены на 100%, что ключи атрибутов совпадают с филлаблами после предидущего foreach
@matroskin978
@matroskin978 3 дня назад
Да, тоже вариант 🙂
@ОлегДерябин-д9с
@ОлегДерябин-д9с 3 дня назад
Спасибо за интересное продолжение. Не планируете шаблонизатор использовать, к примеру Blade?
@matroskin978
@matroskin978 3 дня назад
Пожалуйста) Шаблонизатор не планирую, по крайней мере пока. PHP сам по себе неплох в плане вывода данных по шаблону, поэтому пока обойдусь им.
@AlexCujba-ye1bv
@AlexCujba-ye1bv День назад
Спасибо! Отличный урок! Будет ли пример сохранения модели со связями?
@matroskin978
@matroskin978 День назад
Пожалуйста) Реализации связей в планах нет.
@statistic-py6ip
@statistic-py6ip 2 дня назад
Спасибо за очередной урок, вопрос такой, в папке tmp будут логи ошибок, но помимо этого там, будут и сессии и ещё что-то наверное, может для удобства и структуры сделать в этой папке вложенную папку errors?
@matroskin978
@matroskin978 2 дня назад
@@statistic-py6ip пожалуйста 🙂 В этой папке будут логи и кэш, больше ничего. Под кэш будет папка, потому что файлов может быть больше одного. А файл логов будет один, поэтому не стал создавать папку. Но можете создать, конечно же.
@Monax-go6vq
@Monax-go6vq 3 дня назад
Отлично, спасибо А как предать в PDO INSERT created_at и updated_at? Куда прописать функцию NOW()? (если, допустим, эти поля хочется использовать)
@matroskin978
@matroskin978 3 дня назад
Пожалуйста. Прямо в запрос NOW() и подставлять, не в параметры. db()->query("insert into users (name, email, password, created_at, updated_at) values (?,?,?, NOW(), NOW())", [ 'User Name', 'user_email@mail.com', password_hash('user_password', PASSWORD_DEFAULT) ]);
@statistic-py6ip
@statistic-py6ip 3 дня назад
Вариант с ассоциативными заменами как-то обошли, во всех своих уроках обычно про это упоминаете, как вариант, просто, если будет большой запрос, можно запутаться с позициями и вопросиками.
@matroskin978
@matroskin978 3 дня назад
@@statistic-py6ip как минимум в этом уроке показал. Скорее всего, где-то также показывал. Обычно я как раз использую вопросики и даже в запросах с большим числом параметров сложно запутаться. Просто внимательно сравниваем количество полей и вопросиков, а также соответствие позиции поля и параметра.
@phpstudy8625
@phpstudy8625 2 дня назад
Здраствуйте !!!! при включении модуля php 8.1 в open server 6 горит красный индикатор треугольник внутри восклицательный знак что это такое ???? до сегодня все работало нормально все настраивал по вашему видео
@matroskin978
@matroskin978 2 дня назад
Здравствуйте! Это какая-то ошибка. Часто блокируется изменение файла хостов, но может быть и другая причина. Чтобы знать наверняка - посмотрите лог ошибок в этом файле: .\logs\general.log В документации можно посмотреть возможные другие проблемы и варианты решений: github.com/OSPanel/OpenServerPanel/wiki/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F#%D0%BF%D0%B5%D1%80%D0%B2%D1%8B%D0%B9-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA
@Osgard-w6y
@Osgard-w6y 3 дня назад
Fatal error: Uncaught Error: Class "Whoops\Run" not found in D:\OSPanel6\home\fr.loc\public\index.php:10 Stack trace: #0 {main} thrown in D:\OSPanel6\home\fr.loc\public\index.php on line 10
@Osgard-w6y
@Osgard-w6y 3 дня назад
Розібрався, писав код до require_once ROOT . '/vendor/autoload.php'; вставив після і запрацювало
@matroskin978
@matroskin978 3 дня назад
@@Osgard-w6yвсе вірно, звернення до будь-яких класів мають бути після автолоуду. Будьте уважніші ;)
Далее
Avaz Oxun - Turqi sovuq kal
14:50
Просмотров 391 тыс.
КАК УСТРОЕН TCP/IP?
31:32
Просмотров 112 тыс.