Вообще каркас это mvc без mv , то есть пользователь сам должен решать взять ему доктрину или твиг, или другие удобные инструменты, например элокент и блэйд
То есть контроллер должен уметь принять реквест, что то сделать и отдать респонз. Например вызвать метод модели, по результату данных от модели, например ошибка, сделать редирект или подключить вью ошибки
skobanev, https://www.php.net/manual/ru/features.file-upload...
Тут подробно, там и форма и обработчик, надо будет чуть под себя сделать
Добавить проверки и прочее, по желанию, главное понять принцип, если не получится, кинь код что вы написали, и как не работает
Очень познавательная статья, про то, зачем нам psr