Создание собственного фреймворка. Автозагрузка. Контроллер фреймворка. Урок 3

preview_player
Показать описание

Приветствую вас, друзья. Продолжим создание собственного PHP фреймворка. По итогу мы должны получить вполне функциональное решение, а заодно познакомиться с принципами работы современных PHP фреймворков. В этом уроке мы добавим пространства имен, немного изменим функцию автозагрузки, а также реализуем передачу параметров в действия контроллеров.

В видео версии урока вы найдете ответы на такие вопросы:

• Что такое пространства имен и чем они могут быть полезны?
• Как написать функцию автозагрузки классов?
• Как передать параметры в действия контроллеров?
• Зачем необходим базовый класс Controller?
• Как передать данные в контроллер при создании его объекта?

Рекомендации по теме
Комментарии
Автор

Не сказать, что легко, временами мозги закипали, но за 2 дня осилил, осознал второй урок. Автор, Вы лучший человек на планете

yrgpytp
Автор

До сих пор ничего подобного в русскоязычном инете не обнаружено. Бесподобные уроки - спасибо! (3 года назад бросил - теперь пытаюсь учиться снова )))

androgenius
Автор

ну сложно, сложно, тут главное мысль не терять. Но очень круто.

melissalife
Автор

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

larushorl
Автор

На 33:43, Вы рабиваете строку по "&", из за этого в урле подобно этому: "/register/new-user?first_name=first_name&last_name=last_name", первый параметр остается в первом элементе массива params и с какого то чуда перекидывает на контроллер по умолчанию, если заменить эту "&" на "?" все нормально работает.

bloodkad
Автор

Классные уроки. Андрей, обязательно продолжайте дальше! Ваши уроки очень интересные и познавательные.

delaemsvoisai
Автор

Андрей! Спасибо за уроки. надо продолжение!!!

jplpnmk
Автор

Спасибо, Андрей. Неплохо разъяснили про _GET-параметры. Все доступно и понятно.

eXtracker
Автор

Очень качественный курс. Хорошая база.

sozdanie-saytov
Автор

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

bloodkad
Автор

Очень доступно описано. Подписался на канал, лайки поставил)

mr.mr.
Автор

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

paroniko
Автор

У меня беда, только на данном этапе обнаружил, нужна помощь!
В общем картина такая:
Есть кастомное правило: =>
[ 'controller' => 'test', ] и стандартное: =>
[ ]
Так же имеем два контроллера: TestController и TestNewController у обоих есть метод: indexAction
Дак вот если кастомное правило стоит выше, чем стандартное правило, то:
При вызове localhost/test - Все нормально вызывается indexAction в TestController
При вызове localhost/test-new - Перестает работать пытается вызвать метод NewAction, т.к. в $matches находиться следующий массив
Array
(
[0] => TestNew
[action] => New
[1] => New
)
Как сделать что бы оба правила обрабатывались корректно???
И ради экперемента я поменял правила местами, и все заработало, но проблема в том что там обрабатывается согласно стандартному правилу и до кастомного правила дело не доходит, т.е. это правило можно тупо убрать.
Как сделать что бы корректно работали кастомные правила?

gcomsu
Автор

Спасибо Андрей)) В action'ах вместо строки например 'Posts::index', удобнее использовать константу __METHOD__.

Geqmer
Автор

Почему в функции removeQueryString нельзя упростить и сделать так
return explode('?', $url)[0];
такая логика будет в чём то хуже?

xsyqrxh
Автор

Спасибо, жду продолжения, а когда примерно будет 4 часть?

majikaja
Автор

Для тих хто дивиться в 2к19, щоб показати помилки використовуйте display_errors:
ini_set('display_errors', 1);
error_reporting(-1);

ihorslavinskyi
Автор

Здравствуйте, хотел спросить, в public/.htaccess мы прописали RewriteCond если запрос не идет к файлу или папке, то все перенаправлять в index.php. Но если в папке public есть папки css, js то, например, такая строка fw.loc/public/js откроет доступ к содержимому папки на сервере. Поскольку во фреймворках, я так понимаю структура папок/файлов схожа, то вероятный злоумышленник, зная какими могут быть названия папок, может получить доступ к содержимому. Не опасны ли такие правила htaccess, или же потенциальный доступ к папке public из вне не опасен для сайта?

michaelkovach
Автор

Добрый день.
В 3 уроке при обращении к корню сайта fw.loc выходит ошибка:
Deprecated: preg_match(): Passing null to parameter #2 ($subject) of type string is deprecated in on line 58

При использовании PHP 8.1, при использовании PHP 7.1 ошибка не выходит. С корее всего связано с устаревшей функцией preg_match().
Вопрос. Как переписать код, чтобы работало в PHP 8.1 и последующих версиях без ошибок.

olegdmitriev
Автор

Велику дякую за чудові уроки :)))

А чи не краще було б перед
define ('WWW', __DIR__);
об’явити константу
define ('DS', DIRECTORY_SEPARATOR);
і потім по коду ядра її використовувати?
Наприклад в тій самій функції spl_autoload_register... не писати туди всілякі str_replace чи ще щось, а просто використати константу DS... :)

yuriiradio