Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2

Микрофреймворк Joke на PHP

23.01.2026, 10:28. Показов 1833. Ответов 33
Метки php (Все метки)

Студворк — интернет-сервис помощи студентам
Ради прокачки своих навыков и участия в челендже решил написать фреймворк. У меня нет цели конкурировать с существующими, тем не менее планирую разрабатывать так, что в рамках реализуемого функционала фреймворк был вполне пригоден для применения.

Буду благодарен за мнение, критику, код-ревью....

Суть челенджа

В течении года создать фреймворк и создать с его использованием движок форума. Так же естественно я не планирую создавать навороченный форумный дивжок - просто достаточный для демонстрации и не более (на мой взгляд вообще форумные движки не перспективна задача "в приницпе" )

Фреймворк

Есть релиз 1.1. Базовый функционал работоспособен. Реализовано:
  • Ручная маршрутизация HTTP-запросов
  • DI-контейнер с поддержкой автовайринга параметров
  • Система middleware
  • Управление сессиями (включая поддержку «неблокирующего» режима — данные сессии считываются в начале обработки запроса, после чего сессия немедленно закрывается, позволяя другим запросам от того же пользователя работать параллельно без ожидания завершения текущего.)
  • Обработка ошибок и исключений

GitHub Дока

Для старта с минимальным набором

Bash
1
composer create-project voral/joke-minimal my-app
Видео

Записал видео где показал как ссозздать простейшее приложение Списка задач.
видео
созданное приложение на github

Шаблонизатор

Сейчас работаю над шаблонизатором. Ставиться будет отдельным пакетом. Для первых проб реализовал <j-echo>, <j-if></j-if>, <j-each/>. Есть специальный атрибут static, если его добавлять - перед компиляцией в PHP код, эти узлы AST дерева рендеряться в HTML.

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

Код шаблонизатора GitHub
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2026, 10:28
Ответы с готовыми решениями:

Нужны добровольцы PHP-кодеры
Суть вопроса такая - я подгоняю идеи, вы кодируете, прибыль делим. Кого заинтересует - отпишу...

PHP это не сложно, ну все же хотелось бы знать!
Доброго времени суток уважаемые программисты. Хотелось бы познакомиться с толковыми программистами...

Собираю группу программистов знающих PHP & MySQL, для создания новой online игры
Друзья, Я пришел с миром. Собираю группу программистов знающих PHP &amp; MySQL, для создания новой...

33
Заблокирован
26.01.2026, 11:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от voral Посмотреть сообщение
Пока из относительно нестандартного втащить сразу использование полнотекстового поиска
Полнотекстовый поиск легкая добыча для хакера.
0
Эксперт .NET
 Аватар для Usaga
14745 / 9519 / 1364
Регистрация: 21.01.2016
Сообщений: 35,914
26.01.2026, 12:35
Labusa, это как?
0
Заблокирован
26.01.2026, 13:11
Цитата Сообщение от Usaga Посмотреть сообщение
Labusa, это как?
При наличии большой базы данных и не очень производительного сервера, такой сайт с полнотекстовым поиском легко положить запросами. Придется делать дополнительные защиты. Вообще, эти фичи с полнотекстовым поиском мне не очень понятны. Большинство посетителей приходят с поиска Гугла или Яндекса... если вообще приходят, а не остаются в поиске гугла и читают ответы его ИИ. Вот, например, я как пользователь редко юзаю поиски на сайтах. Думаю, что таких большинство.
Ооо... вспомнил. На Валтберес постоянно использую поиск, но лучше бы этот поиск не был полнотекстовым. Иногда такую ерунду выдает. Пишу запрос "ноутбуки без вентиляторов" и он мне в ответе кучу вентиляторов и ни одного ноутбука. Пора им уже ИИ внедрять в свой поиск, что бы ерунду не показывал.
0
Эксперт .NET
 Аватар для Usaga
14745 / 9519 / 1364
Регистрация: 21.01.2016
Сообщений: 35,914
26.01.2026, 13:19
Labusa, интересно) Чем полнотекстовый поиск таким выделяется, что положить сервер может? Ты что-то свое подразумеваешь под таким поиском?
0
Заблокирован
26.01.2026, 13:27
Usaga, http://www.mysql.ru/docs/man/Fulltext_Search.html
0
 Аватар для Noname2331
95 / 79 / 10
Регистрация: 22.12.2024
Сообщений: 552
26.01.2026, 13:42
Цитата Сообщение от voral Посмотреть сообщение
Ок.
Правда я следую по плану челенджа. А качественный, продуманный кверибилдер да еще и если учесть различные диалекты, имхо, задача сама по себе "на год" (с учетом того что это все в свободное от работы и прочих дел время Пока из относительно нестандартного втащить сразу использование полнотекстового поиска (для форума это может пригодиться)
Тем более, все уже написано Не знаю как сейчас, давно выпал из орбиты PHP фреймворков, но раньше хорошим тоном было писать только само ядро, остальное подтягивать через зависимости скелетона (там какой-то PSR стандарт на это), с возможностью дать юзеру сменить эти предустановки. Даже с целью обучения - лучше учиться собирать готовое из компонентов, чем писать свое.

Я бы вообще взял готовый QueryBuilder, подключил через драйвер и поверх него натянул разные фреймворко-специфические штучки, которые помогают строить чейны. Это же касается шаблонизатора на самом деле.
0
Эксперт .NET
 Аватар для Usaga
14745 / 9519 / 1364
Регистрация: 21.01.2016
Сообщений: 35,914
26.01.2026, 13:52
Labusa, и?
0
 Аватар для Noname2331
95 / 79 / 10
Регистрация: 22.12.2024
Сообщений: 552
26.01.2026, 14:05
Labusa, комаров бояться - в лес не ходить. Но лучше купить накомарник.

Есть много способов защиты от бото-атак. В Ларавел этим занимается модуль throttle например, ограничивающий частоту запросов.
1
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
26.01.2026, 16:06  [ТС]
Цитата Сообщение от Labusa Посмотреть сообщение
При наличии большой базы данных и не очень производительного сервера, такой сайт с полнотекстовым поиском легко положить запросами. Придется делать дополнительные защиты.
Ну значит будет защищать Я сам на форумах предпочитаю пользоваться "локальным" поиском. Да когда в поиске нашел и пришел на форум это одно, когда я на форуме - я не хочу ходить в поиск. По условию челенджа стороннее нельзя использовать, "обычный" через like слишком тупо. Ну, а если представить гепотетически что этот форум пойдет прям в реальный прод то там естественно будет интеграция, например, со сфинксом (ну точнее некий интерфейс по которому можно завести нормальный поиск)
Цитата Сообщение от Labusa Посмотреть сообщение
Вот, например, я как пользователь редко юзаю поиски на сайтах. Думаю, что таких большинство.
Тут скорее зависит от сайта. У меня есть онлайн сервис и я там забил делать поиск. А т.к. общаюсь с пользователями - это то, чего им явно не хватает

Цитата Сообщение от Noname2331 Посмотреть сообщение
Тем более, все уже написано Не знаю как сейчас, давно выпал из орбиты PHP фреймворков, но раньше хорошим тоном было писать только само ядро, остальное подтягивать через зависимости скелетона (там какой-то PSR стандарт на это), с возможностью дать юзеру сменить эти предустановки.
Я на память PSRы не помню, втягивать их в проект - нарушение условий. Что поделать - дал слово (хотя уже сейчас подумываю все же подключить php cs fixer, и php stan - все же это не часть кода разработки и "пользователям" оно не тянется.

А так, у меня не будет жестких привязок, я описываю интерфейсами все что можно заменить, т.е. потенциально через адаптор можно подключать. готовое
Цитата Сообщение от Noname2331 Посмотреть сообщение
Даже с целью обучения - лучше учиться собирать готовое из компонентов, чем писать свое.
Тут вопрос в том, какова цель учебы Я так то далеко не первый год в веб разработке, а вообще в разработке и того больше . Лично мне интересно просто попробовать все это написать для себя (ну кто то играет на гитаре, кто то крестиком вышивает ). Конечно и некоторые пробелы в моих знаниях закрывает. Ну с тем же AST деревом разобрался.. Согласитесь сколько бы я на ларавел не собирал проектов - это бы в ряд ли копнул.

Цитата Сообщение от Noname2331 Посмотреть сообщение
Я бы вообще взял готовый QueryBuilder, подключил через драйвер и поверх него натянул разные фреймворко-специфические штучки, которые помогают строить чейны. Это же касается шаблонизатора на самом деле.
И тут опять же вопрос в целях и задачах. Понятно что можно взять готовые инструменты и закрывать тему

Добавлено через 4 минуты
Но о PSR я конечно тоже подумываю. Тут только тоже вопрос не совсем простой. Ведь не все соблюдают их, и кто то даже отказывается. Есть и спорные моменты. В общем возможно буду об этом думать позже
0
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
29.04.2026, 10:48  [ТС]
Выпустил новый релиз.

Решил попробовать новую концепцию к формированию ответа, когда речь идет про HTML ответ. Т.е. Response собирает полноценную страницу непосредственно перед отправкой. Не путать с шаблонизатором - шаблонизатор будет взаимодействовать с эти объектом ответа. Т.е. ответ будет по отдельности содержать/накапливать, например: основной контент страницы, список подключаемых файлов (css, js) список метатегов. И уже в конце собирать страницу.

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

Как пример - можно будет вынести подключение счетчиков в мидлвар.....

В общем поэкспериментирую с этим

Подробнее в доке


Так же кому интересно есть видео про создание мидлвары для работы с CORS - буду благодарен фидбеку про реализации. Код на гитхабе, но кому интереснее по видео:

VK
Youtube
2
 Аватар для Noname2331
95 / 79 / 10
Регистрация: 22.12.2024
Сообщений: 552
29.04.2026, 21:32
А внутри body не планируете снос границы php и html+js для конечного прогера? Чтобы PHP фреймворк выходил за пределы сервера (виртуально) и захватывал и управление браузером?

PHP
1
2
3
4
$response->dom->getElementById('show-button')->addListener('click', fn($dom, $element) => {
    $dom->getElementById('content-block')->classList->toggle('hidden');
    $dom->getElementById('content-block')->classList->toggle('showed');
});
Там и до реактивности недалеко.
1
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
29.04.2026, 21:38  [ТС]
Хм. Что бы он порождал, по сути, js код? Вариант интересный как направление. Особенно если его завернуть в какой то роадраннер например.

Пасиб за идею... подумаю в этом направлении
0
 Аватар для Noname2331
95 / 79 / 10
Регистрация: 22.12.2024
Сообщений: 552
29.04.2026, 21:47
Цитата Сообщение от voral Посмотреть сообщение
Хм. Что бы он порождал, по сути, js код?
Да.

Там вообще интересный опыт открывается для новичков. Это старики знают, как склеены все эти слои и как пробросить данные туда-сюда. А новичок хочет, чтобы у него перед глазами был простой бесшовный код на одном языке, а юзер ввел что-то в инпут и оно как-то само и страницу перерисовало и в базу на сервер сохранило если надо.

Много либ встречал, которые идут в этом бесшовном направлении. Но "нормальной" - нет, везде что-то не то или не так.
1
3061 / 1465 / 265
Регистрация: 16.03.2008
Сообщений: 6,512
Записей в блоге: 2
31.08.2026, 08:10  [ТС]
тем временем продолжаю свои изыскания.

Уже выпустил релиз 1.5.

Но последние два месяца раблал над моулем шаблонизатора. Интересная задача с построением AST дерева. Успел несколько вариантов перебрать прежде чем остановился на окончательном и в итоге выпустил первый релиз. Док в наличии

Из основного:

Поддерживаются два синтаксиса {{переменная}} (для вывода значения переменной) и {% директива [...параметры] %} - различные функциональные директивы. Можно, если потребуется, добавить и свой вариант. Поддерживается точечная нотация для доступа к значениям на любой глубине массивов.

Сейчас реализованы базовые директивы:

например if...elseif..else, foreach, layout (для указания каркаса в котором будет выведен окруженный блок шаблона), include (для подключения подключаемых файлов стилей и скриптов)....

а так же component - подключение компонента.

Директивы можно создавать и регистрировать свои.

Компонент это блок обладающий своим функционалом. Можно разрабатывать свои компоненты (из коробки их нет, это все же уже про конкретику, а шаблонизатор дает механизм)

Коротко постарался показать работу с шаблонизатором (включая создание своей директивы и своего компонента) в видео ВК и youtube
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2026, 08:10

Пишу программу для написания приложений под Windows на HTML, CSS, PHP, JS
Пишу программу для написание приложений под Windows на HTML, CSS, PHP, JS. Уже готовы несколько...

Онлайт чат - изучение JavaScript и PHP
Я решил изуть php и javascript, с основами этих языков я знаком конечно, хочу создать какой нибудь...

Совместное Обучение HTML, CSS, PHP
Изучение - HTML,CSS,PHP+MySql и т.д. Заранее хотел бы сказать, что не важно владеет ли человек...

Программистам php: Нуждаюсь в команде энтузиастов вашего дела
Здравствуйте господа. Заранее прошу сразу себя сортировать. Нуждаюсь в команде энтузиастов вашего...

программирование на php DevelStudio
Ищу партнера который разбирается в программирование на php DevelStudio Вот мой Skype..для связи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru