Создание собственного PHP MVC фреймворка на ООП. 27. Класс для работы с файлами-2
ฝัง
- เผยแพร่เมื่อ 31 ม.ค. 2025
- В этом уроке мы завершим писать класс для работы с файлами, который позволит работать с загружаемыми на сервер файлами.
Исходники к уроку - github.com/mat...
Переходите и подписывайтесь на канал Александра, где есть много уроков по работе с фреймворком Symfony:
/ @burmalex
==========================================
💖 Поддержка канала
www.donational...
4731 2196 5549 6408 (ПриватБанк)
matroskin978@gmail.com (PayPal)
TXGoBr7UrwRUYx7FpzbiG8znkgC6fhwtEF (USDT TRC20)
410014621600849 (ЮMoney)
===============================================
Мои курсы на Udemy
Не получается приобрести курс или нужна скидка - обращайтесь. Решим :)
Laravel 11. Теория и практика работы с PHP-фреймворком - www.udemy.com/...
Курс "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/...
💖 Поддержка канала
www.donationalerts.com/r/matroskin978
4731 2196 5549 6408 (ПриватБанк)
matroskin978@gmail.com (PayPal)
TXGoBr7UrwRUYx7FpzbiG8znkgC6fhwtEF (USDT TRC20)
410014621600849 (ЮMoney)
===============================================
Мои курсы на Udemy
Не получается приобрести курс или нужна скидка - обращайтесь. Решим :)
Laravel 11. Теория и практика работы с PHP-фреймворком - www.udemy.com/course/laravel-11-php/?referralCode=9D54F544CCFD5E79FB11
Курс "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
Спасибо что продолжаете курс. Будет чем заняться на новогодних выходных. Всех с Наступающим и всем добра!
@@Gor4akof пожалуйста 😉
С наступающим Новым годом!
Здравствуйте, Андрей!
Благодарю за продолжение данного цикла уроков! Действительно, данный фреймворк лучше сделать как можно более целостным и полным, лишь затем переходить к CMS. CMS, которая, надеемся, будет такой же многофункциональной, всеобъемлющей, и главное - профессиональной. Фреймворк и CMS - основа, столь необходимая сейчас и всегда. Большая удача изучать основу (как и другое) у Вас! Ждем продолжения!
Вам вдохновения и хороших учеников!
С праздниками!
Спасибо ☺
Вас также с наступающим Новым годом! 🙂
Классный урок !!! Спасибо огромное !!!
Пожалуйста 🙂
Приветствую Андрей, супер, спасибо за продолжение, с наступающими...😊
Спасибо ☺
Вас также с наступающим Новым годом! 🙂
По поводу "курса по symfony" и просили записать уроки, этот фреймворк более популярен на западе, я бы попросил тоже записать уроки по Typo3, т.к. вообще отсутствуют материалы по этому фреймворку, и он тоже солидный. Сайты Мерседес, Фольксваген, Газпром и т.д сделаны на нем, уж не знаю найдется у Вас время и желание...
@@statistic-py6ip слышал об этой CMS, но ни разу не приходилось сталкиваться. Если будет время - обязательно посмотрю. Если понравится - попробую записать и уроки ;)
Спасибо! Очень хороший цикл получился! С наступающим новым годом!
Ждем продолжения дроп зон
Спасибо! Вас также с наступающим Новым годом! 🙂
Благодарю! Будем смотреть
Спасибо, что продолжаешь эту серию.
👍👍👍
Спасибо! Очень крутые уроки, не успеваешь смотреть, так быстро выходят новые выпуски! Андрей, а когда ждать новый курс по Ларке на Юдеми?
Пожалуйста)
Ждать в следующем году)) Точных сроков пока не готов назвать, времени сейчас не очень много, поэтому движется все не так быстро, как хотелось бы.
Приветсвую Андрей, с новым годом, как я понимаю дело подходит к админке, в своих проектах часто выбираете AdminLTE, в чем ее преимущества по сравнению с Moonshine, Orchid, пробовали ли эти варианты, какие есть минусы и плюсы, не могли бы затронуть и эту тему?
Добрый день! Спасибо) Вас также с Новым годом!
AdminLTE нельзя сравнивать с Moonshine или Orchid, поскольку это совершенно разные продукты. AdminLTE - это только верстка. Больше ничего. Соответственно, эту верстку можно использовать для любого проекта, который пишется с нуля на готовом фреймворке (типа Laravel) или на собственном решении.
Продукты же типа Moonshine или Orchid - это пакеты под конкретный фреймворк (Laravel), которые предлагают уже готовую админку, т.е. не только верстку, а готовый функционал админки. Соответственно, Moonshine и Orchid можно использовать только под Laravel и для текущего проекта они просто не подходят. Поэтому и сравнивать нечего.
AdminLTE можно сравнивать с аналогичными продуктами, т.е. верстками. Например, такими как: DeskApp Admin, Adminator, ArchitectUI и т.п. Но все это сравнение будет чистом визуальными по сути, т.е. чей дизайн больше нравится.
@matroskin978 ошибся плейлистом и хотел написать в плейлист, где уроки по Laravel, и в платном курсе по Laravel 11 тоже используете AdminLTE, хотелось бы понять преимущества такого подхода перед другими вариантами...
@@statistic-py6ip преимущества готовых админок - скорость разработки, поскольку админка уже готова. Преимущества разработки админки с нуля - гибкость и больше контроля над кодом, поскольку весь код мы пишем самостоятельно. Но могу ошибаться, поскольку у меня нет опыта использования готовых админок.
@matroskin978 а для Ларавель, какая более на Ваш взгляд заточена AdminLTE, Orchid, Moonshine?Как бы их сравнить?
@@statistic-py6ip никак не сравнить)
AdminLTE не заточена ни под Laravel, ни под любой другой фреймворк. Еще раз, AdminLTE - это всего-навсего верстка и ничего больше. В ней нет ни строчки кода на PHP. Поэтому то, что вы из нее сделаете, то и получите в конечном счете. Это может быть админка под любой фреймворк. Но, само-собой, придется писать код этой админки, поскольку с AdminLTE у нас на руках только верстка.
В то же время Orchid и Moonshine - это готовые пакеты под Laravel. Как можно сравнить программные продукты с версткой? Никак. Это все равно что сравнивать теплое с мягким. Абсолютно разные качества ведь.
Что касается сравнения Orchid с Moonshine, то, как и писал выше, я не работал с ними, поэтому ничего сказать здесь не смогу.
Скажите какой будет плей лист следующий по онлайн магазину?
Такой и будет) по написанию интернет-магазина на фреймворке. Начнется он, скорее всего, через 1-2 недели.
Сможете ли вы рассказать или направить где почитать про авторизацию, регистрацию по телефону через СМС?
@@andreubekish3760 по запросу в Google "php отправка смс" есть огромное количество статей. Для реализации нужно использовать api любого сервиса по отправке СМС. Все они платные (бесплатных я не знаю). Суть проста: вы генерируете для пользователя уникальный код, который отправляете через API сервису для отправки СМС. Пользователь, получив сообщение с кодом, вводит код. Вы сравниваете его с отправленным. Если совпадают - пускаем, иначе - нет.
Спасибо, Андрей, за ваш труд, и у меня будет к вам вопрос по поводу контроллеров:
У нас имеются контроллеры, которые инициализируются в Router-e, в момент инициализации, отрабатывает конструктор наследуемого BaseController-a, в который вынесена общая логика для всех инициализируемых контроллеров. В свою очередь в ядре (папка "core") существует класс Controller, котрый наследуется BaseController-ом - и он пуст.
Я понимаю, что так как в контроллерах мы пользуемся хелперами (app() и т,п), то в ядро такой код концептуально лучше не помещать
Вопрос: Логика какого рода может быть размещена в классе core\Controller?
@@Monax-go6vq пожалуйста 🙂
В контроллер ядра можно выносить логику фреймворка (не приложения). У нас такой логики не было, поэтому там пусто. Если что-то потребуется, то напишем. Но, скорее всего, и не потребуется. Поэтому он у нас там просто на всякий случай)
@@matroskin978 А, например, что там может быть?
@Monax-go6vq любая логика ядра, которая может использоваться в наследуемых контроллерах. Или даже данные, которые относятся к приложению. Например, название шаблона, чтобы потом в каком-то контроллере его можно было переопределить. У нас это зашито в хэлпер view, если не ошибаюсь. Если что-то придет на ум - обязательно реализую в контроллере ядра. Пока ничего такого на ум не пришло)
Андрей, если позволите - снова вопрос:
создаю переменные для оформления заказа. получаю набор такого вида:
$data['customer'] = $_POST['customer'] ?? null;
$data['order_product'] = $_POST['product'] ?? '';
..... и так далее
все бы хорошо, но как дело доходит до даты -
$data['order-date'] = $_POST['order-date'] ?? date('Y-m-d', strtotime());
- в массиве , если нету данных POST - пустая строка.
двумя строками выше, до начала формирования массива $data вывожу
echo date('Y-m-d', strtotime()), - получаю текущий день. А в массиве - пусто.
это почему так? Как это забороть?
P.S. - если это вдруг важно - в поле $_POST['order-date'] дата берется с AirDatepicker.
Еще раз спасибо за ваши труды. С нетерпением жду нового плэйлиста - фреймворк+магазин замков.
Тут сразу несколько замечаний)
1. Вместо такой конструкции:
$data['customer'] = $_POST['customer'] ?? null;
Можно использовать такой вариант:
$data['customer'] = request()->post('name');
Результат будет тем же. Мы специально добаляли такую возможность во фреймворк ;)
2. Вызов функции strtotime() без параметра должно привести к ошибке. Странно, что вы ее не наблюдаете. Функция имеет обязательный параметр, который нужно передать.
3. Для получения текущей даты достаточно такого варианта:
date('Y-m-d');
Функция strtotime() там явно лишняя.
4. Ваш вариант или мой вариант из первого пункта проверяют на существование элемента в массиве POST, но не на пустоту. Соответственно, любой из этих вариантов:
$data['order-date'] = $_POST['order-date'] ?? date('Y-m-d');
$data['order-date'] = request()->post('name', date('Y-m-d'));
запишет по ключу order-date текущую дату только в том случае, если в форме вовсе не будет поля с датой. Если же оно есть и приходит пустым, тогда по ключу order-date будет записана пустая строка. Чтобы записать значение по умолчанию, можно использовать такой вариант:
$data['order-date'] = request()->post('order-date') ?: date('Y-m-d');
Теперь будет записываться либо присланная дата, либо текущая дата, если в форме дата не выбиралась.
@@matroskin978 по части strtotime - я перепутал, я проверял функцией time().
на форуме php.ru прочитал:
"Обычная ошибка нуба, это то, что php-шная функция date() якобы возвращает текущую дату. На самом деле она возвращает строку и не обязательно по текущей дате - это зависит от аргументов. А текущую дату+время возвращает функция time() !!!"
короче я пробовал и просто date(('Y-m-d') date('Y-m-d', time()) и date('Y-m-d', strtotime(today)) - ничего. Весь массив дата заполнен, кроме поля order-date (если его оставлять пустым).
Я, по моему, дважды натупил. Во-первых -у меня дебагался $_POST после создания переменных, а не $date. И таки да, если поле order-data оставлять пустым - то в переменную $_POST ничего не запишется. Каким бы странным это не показалось ))). А во-вторых, у меня в БД поле даты стоит по умолчанию CURRENT_TIMESTAMP, так что оно при пустом поле все равно заполняется... ))
В общем, как всегда, спасибо, все оказалось в банальной невнимательности и неопытности..
З.Ы - есть, правда еще один вопрос, связаный с версткой и JQuery/Ajax но мне уже неудобно аж спрашивать.. Я запостил на cyberforum но чет там ответа нету...
@@Gor4akof >>> на форуме php.ru прочитал: "Обычная ошибка нуба, это то, что php-шная функция date() якобы возвращает текущую дату. На самом деле она возвращает строку и не обязательно по текущей дате - это зависит от аргументов. А текущую дату+время возвращает функция time() !!!"
Ерунда)) Во-первых, функция time() не возвращает текущую дату+время. Она возвращает метку времени, из которой уже можно получить дату+время. Во-вторых, идем в документацию и читаем описание функции date(), конкретнее, второго параметра:
>>> Необязательный параметр timestamp - целочисленная (int) метка времени, которая по умолчанию равна текущему местному времени, если параметр timestamp не указали или равен null. Говоря по другому, значение по умолчанию равно результату функции time().
Исходя из документации (а не форума), можно не передавать вторым параметром time(), поскольку это значение по умолчанию.
>>> В общем, как всегда, спасибо, все оказалось в банальной невнимательности и неопытности..
Как всегда, пожалуйста ;)
Здраствуйте а как отправлять несколько файлов ??? Можно посмотреть этот код ???
Здравствуйте!
Проходитесь в цикле по массиву файлов (этот момент я показывал) и сохраняете пути к принятым файлам в массив. После этого просто передаете полученный массив в функцию send_mail() последним параметром.
Если файлы после этого нужно удалить, тогда проходитесь в цикле по массиву путей и для каждого файла вызываете File::remove();
Собственно и все) Кода у меня нет, но вы попробуйте. Если что-то не будет получаться - я подскажу ;)
@@matroskin978 ok спасибо