Создание собственного 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/...

ความคิดเห็น • 40

  • @matroskin978
    @matroskin978  หลายเดือนก่อน

    💖 Поддержка канала
    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
    @Gor4akof หลายเดือนก่อน

    Спасибо что продолжаете курс. Будет чем заняться на новогодних выходных. Всех с Наступающим и всем добра!

    • @matroskin978
      @matroskin978  หลายเดือนก่อน

      @@Gor4akof пожалуйста 😉
      С наступающим Новым годом!

  • @ВадимРаевский-ш3ъ
    @ВадимРаевский-ш3ъ หลายเดือนก่อน

    Здравствуйте, Андрей!
    Благодарю за продолжение данного цикла уроков! Действительно, данный фреймворк лучше сделать как можно более целостным и полным, лишь затем переходить к CMS. CMS, которая, надеемся, будет такой же многофункциональной, всеобъемлющей, и главное - профессиональной. Фреймворк и CMS - основа, столь необходимая сейчас и всегда. Большая удача изучать основу (как и другое) у Вас! Ждем продолжения!
    Вам вдохновения и хороших учеников!
    С праздниками!

    • @matroskin978
      @matroskin978  หลายเดือนก่อน

      Спасибо ☺
      Вас также с наступающим Новым годом! 🙂

  • @phpstudy8625
    @phpstudy8625 21 วันที่ผ่านมา

    Классный урок !!! Спасибо огромное !!!

    • @matroskin978
      @matroskin978  21 วันที่ผ่านมา

      Пожалуйста 🙂

  • @statistic-py6ip
    @statistic-py6ip หลายเดือนก่อน

    Приветствую Андрей, супер, спасибо за продолжение, с наступающими...😊

    • @matroskin978
      @matroskin978  หลายเดือนก่อน

      Спасибо ☺
      Вас также с наступающим Новым годом! 🙂

    • @statistic-py6ip
      @statistic-py6ip หลายเดือนก่อน

      По поводу "курса по symfony" и просили записать уроки, этот фреймворк более популярен на западе, я бы попросил тоже записать уроки по Typo3, т.к. вообще отсутствуют материалы по этому фреймворку, и он тоже солидный. Сайты Мерседес, Фольксваген, Газпром и т.д сделаны на нем, уж не знаю найдется у Вас время и желание...

    • @matroskin978
      @matroskin978  หลายเดือนก่อน

      @@statistic-py6ip слышал об этой CMS, но ни разу не приходилось сталкиваться. Если будет время - обязательно посмотрю. Если понравится - попробую записать и уроки ;)

  • @nicolaskeratry
    @nicolaskeratry หลายเดือนก่อน

    Спасибо! Очень хороший цикл получился! С наступающим новым годом!
    Ждем продолжения дроп зон

    • @matroskin978
      @matroskin978  หลายเดือนก่อน +1

      Спасибо! Вас также с наступающим Новым годом! 🙂

  • @nicolaskeratry
    @nicolaskeratry หลายเดือนก่อน +1

    Благодарю! Будем смотреть

  • @ОлегДерябин-д9с
    @ОлегДерябин-д9с หลายเดือนก่อน +2

    Спасибо, что продолжаешь эту серию.

  • @dmitriykret8938
    @dmitriykret8938 หลายเดือนก่อน

    👍👍👍

  • @ManWhoChoseFreedom
    @ManWhoChoseFreedom หลายเดือนก่อน

    Спасибо! Очень крутые уроки, не успеваешь смотреть, так быстро выходят новые выпуски! Андрей, а когда ждать новый курс по Ларке на Юдеми?

    • @matroskin978
      @matroskin978  หลายเดือนก่อน +1

      Пожалуйста)
      Ждать в следующем году)) Точных сроков пока не готов назвать, времени сейчас не очень много, поэтому движется все не так быстро, как хотелось бы.

  • @statistic-py6ip
    @statistic-py6ip หลายเดือนก่อน +1

    Приветсвую Андрей, с новым годом, как я понимаю дело подходит к админке, в своих проектах часто выбираете AdminLTE, в чем ее преимущества по сравнению с Moonshine, Orchid, пробовали ли эти варианты, какие есть минусы и плюсы, не могли бы затронуть и эту тему?

    • @matroskin978
      @matroskin978  หลายเดือนก่อน

      Добрый день! Спасибо) Вас также с Новым годом!
      AdminLTE нельзя сравнивать с Moonshine или Orchid, поскольку это совершенно разные продукты. AdminLTE - это только верстка. Больше ничего. Соответственно, эту верстку можно использовать для любого проекта, который пишется с нуля на готовом фреймворке (типа Laravel) или на собственном решении.
      Продукты же типа Moonshine или Orchid - это пакеты под конкретный фреймворк (Laravel), которые предлагают уже готовую админку, т.е. не только верстку, а готовый функционал админки. Соответственно, Moonshine и Orchid можно использовать только под Laravel и для текущего проекта они просто не подходят. Поэтому и сравнивать нечего.
      AdminLTE можно сравнивать с аналогичными продуктами, т.е. верстками. Например, такими как: DeskApp Admin, Adminator, ArchitectUI и т.п. Но все это сравнение будет чистом визуальными по сути, т.е. чей дизайн больше нравится.

    • @statistic-py6ip
      @statistic-py6ip หลายเดือนก่อน

      @matroskin978 ошибся плейлистом и хотел написать в плейлист, где уроки по Laravel, и в платном курсе по Laravel 11 тоже используете AdminLTE, хотелось бы понять преимущества такого подхода перед другими вариантами...

    • @matroskin978
      @matroskin978  หลายเดือนก่อน

      @@statistic-py6ip преимущества готовых админок - скорость разработки, поскольку админка уже готова. Преимущества разработки админки с нуля - гибкость и больше контроля над кодом, поскольку весь код мы пишем самостоятельно. Но могу ошибаться, поскольку у меня нет опыта использования готовых админок.

    • @statistic-py6ip
      @statistic-py6ip หลายเดือนก่อน

      @matroskin978 а для Ларавель, какая более на Ваш взгляд заточена AdminLTE, Orchid, Moonshine?Как бы их сравнить?

    • @matroskin978
      @matroskin978  หลายเดือนก่อน

      @@statistic-py6ip никак не сравнить)
      AdminLTE не заточена ни под Laravel, ни под любой другой фреймворк. Еще раз, AdminLTE - это всего-навсего верстка и ничего больше. В ней нет ни строчки кода на PHP. Поэтому то, что вы из нее сделаете, то и получите в конечном счете. Это может быть админка под любой фреймворк. Но, само-собой, придется писать код этой админки, поскольку с AdminLTE у нас на руках только верстка.
      В то же время Orchid и Moonshine - это готовые пакеты под Laravel. Как можно сравнить программные продукты с версткой? Никак. Это все равно что сравнивать теплое с мягким. Абсолютно разные качества ведь.
      Что касается сравнения Orchid с Moonshine, то, как и писал выше, я не работал с ними, поэтому ничего сказать здесь не смогу.

  • @andreubekish3760
    @andreubekish3760 3 วันที่ผ่านมา

    Скажите какой будет плей лист следующий по онлайн магазину?

    • @matroskin978
      @matroskin978  3 วันที่ผ่านมา

      Такой и будет) по написанию интернет-магазина на фреймворке. Начнется он, скорее всего, через 1-2 недели.

  • @andreubekish3760
    @andreubekish3760 3 วันที่ผ่านมา

    Сможете ли вы рассказать или направить где почитать про авторизацию, регистрацию по телефону через СМС?

    • @matroskin978
      @matroskin978  2 วันที่ผ่านมา +1

      @@andreubekish3760 по запросу в Google "php отправка смс" есть огромное количество статей. Для реализации нужно использовать api любого сервиса по отправке СМС. Все они платные (бесплатных я не знаю). Суть проста: вы генерируете для пользователя уникальный код, который отправляете через API сервису для отправки СМС. Пользователь, получив сообщение с кодом, вводит код. Вы сравниваете его с отправленным. Если совпадают - пускаем, иначе - нет.

  • @Monax-go6vq
    @Monax-go6vq 29 วันที่ผ่านมา

    Спасибо, Андрей, за ваш труд, и у меня будет к вам вопрос по поводу контроллеров:
    У нас имеются контроллеры, которые инициализируются в Router-e, в момент инициализации, отрабатывает конструктор наследуемого BaseController-a, в который вынесена общая логика для всех инициализируемых контроллеров. В свою очередь в ядре (папка "core") существует класс Controller, котрый наследуется BaseController-ом - и он пуст.
    Я понимаю, что так как в контроллерах мы пользуемся хелперами (app() и т,п), то в ядро такой код концептуально лучше не помещать
    Вопрос: Логика какого рода может быть размещена в классе core\Controller?

    • @matroskin978
      @matroskin978  29 วันที่ผ่านมา

      @@Monax-go6vq пожалуйста 🙂
      В контроллер ядра можно выносить логику фреймворка (не приложения). У нас такой логики не было, поэтому там пусто. Если что-то потребуется, то напишем. Но, скорее всего, и не потребуется. Поэтому он у нас там просто на всякий случай)

    • @Monax-go6vq
      @Monax-go6vq 29 วันที่ผ่านมา

      @@matroskin978 А, например, что там может быть?

    • @matroskin978
      @matroskin978  29 วันที่ผ่านมา

      @Monax-go6vq любая логика ядра, которая может использоваться в наследуемых контроллерах. Или даже данные, которые относятся к приложению. Например, название шаблона, чтобы потом в каком-то контроллере его можно было переопределить. У нас это зашито в хэлпер view, если не ошибаюсь. Если что-то придет на ум - обязательно реализую в контроллере ядра. Пока ничего такого на ум не пришло)

  • @Gor4akof
    @Gor4akof 16 วันที่ผ่านมา

    Андрей, если позволите - снова вопрос:
    создаю переменные для оформления заказа. получаю набор такого вида:
    $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.
    Еще раз спасибо за ваши труды. С нетерпением жду нового плэйлиста - фреймворк+магазин замков.

    • @matroskin978
      @matroskin978  16 วันที่ผ่านมา

      Тут сразу несколько замечаний)
      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');
      Теперь будет записываться либо присланная дата, либо текущая дата, если в форме дата не выбиралась.

    • @Gor4akof
      @Gor4akof 16 วันที่ผ่านมา

      @@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 но чет там ответа нету...

    • @matroskin978
      @matroskin978  16 วันที่ผ่านมา

      @@Gor4akof >>> на форуме php.ru прочитал: "Обычная ошибка нуба, это то, что php-шная функция date() якобы возвращает текущую дату. На самом деле она возвращает строку и не обязательно по текущей дате - это зависит от аргументов. А текущую дату+время возвращает функция time() !!!"
      Ерунда)) Во-первых, функция time() не возвращает текущую дату+время. Она возвращает метку времени, из которой уже можно получить дату+время. Во-вторых, идем в документацию и читаем описание функции date(), конкретнее, второго параметра:
      >>> Необязательный параметр timestamp - целочисленная (int) метка времени, которая по умолчанию равна текущему местному времени, если параметр timestamp не указали или равен null. Говоря по другому, значение по умолчанию равно результату функции time().
      Исходя из документации (а не форума), можно не передавать вторым параметром time(), поскольку это значение по умолчанию.
      >>> В общем, как всегда, спасибо, все оказалось в банальной невнимательности и неопытности..
      Как всегда, пожалуйста ;)

  • @phpstudy8625
    @phpstudy8625 17 วันที่ผ่านมา

    Здраствуйте а как отправлять несколько файлов ??? Можно посмотреть этот код ???

    • @matroskin978
      @matroskin978  17 วันที่ผ่านมา

      Здравствуйте!
      Проходитесь в цикле по массиву файлов (этот момент я показывал) и сохраняете пути к принятым файлам в массив. После этого просто передаете полученный массив в функцию send_mail() последним параметром.
      Если файлы после этого нужно удалить, тогда проходитесь в цикле по массиву путей и для каждого файла вызываете File::remove();
      Собственно и все) Кода у меня нет, но вы попробуйте. Если что-то не будет получаться - я подскажу ;)

    • @phpstudy8625
      @phpstudy8625 16 วันที่ผ่านมา

      @@matroskin978 ok спасибо