Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48

Wrong MVC - система для быстрой web разработки и запуска сайтов

31.03.2023, 05:34. Показов 6134. Ответов 76

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

Wrong MVC - это среда для WEB разработки, включающая в себя множество необходимых компонентов, систематизированных в единое пространство и иерархию. Это тот фундамент, позволяющий очень гибко создавать уникальные системы с функционалом действий и страниц, назначенным определенным группам пользователей. Это система для создания на её базе любых WEB проектов, от простейших лендингов в несколько страниц, до сложнейших с многоуровневым разграничением прав доступов и пользовательского функционала, групповыми политиками доступов к моделям функционала, готовым умным uri роутингом, собственной cron реализацией, визуализацией всех моделей и их удобным управлением.

Это не Laravel в плане концепции MVC как таковых, и это не Wordpress в плане концепции сайтовых движков, это WRONG MVC! Система рассчитана на использование опытными Full-stack разработчиками, здесь реализованы все базовые нюансы, которые существенно упрощают и систематизируют разработку. Разобравшись в логике работы данной системы и её возможностях, вы гарантированно и навсегда забудете про php фреймворки или движки! Потому что сборка и реализация любых сложных проектов превратится в простое удовольствие.

ПО "Wrong MVC" имеет открытый исходный код и распространяется под лицензией свободного ПО - Apache License 2.0.

https://wrong-mvc.com/ - сайт проекта, с подробной документацией и описанием
https://github.com/avtobys/wrong-mvc - проект на гитхаб
https://gitlab.com/avtobys/wrong-mvc - проект на гитлаб

Из того что "под капотом":
- Визуально понятная система моделей и контроллеров
- Неограниченная вложенность уровней доступа
- Автоматический роутинг страниц и запросов
- Настраиваемые шаблоны страниц и действий
- Конструктор триггеров действий
- Встроенный редактор кода с подсветкой и горячими клавишами
- Управление группами доступа, пользователями и их функционалом
- Умные стеки PHP - JavaScript кода
- Модальные окна запрашиваемые автоматически из API по AJAX
- Умная подгрузка js библиотек по мере их применения
- API действий, выборок и модальных окон
- X-Auth-Token авторизация в API
- Копирование, экспорт, импорт моделей
- Логгирование любых действий
- Встроенные CRON задачи с выполнением от имени пользователей
- Готовый gulp комбайн для вёрсток и кастомизации
- Создание простых сайтов в пару кликов из готовых шаблонов
- Автоматическая защита всех форм от CSRF
- Бессрочная авторизация по COOKIE с криптованием UID
- Hcaptcha по лимиту Brute force попыток
- Oauth google + yandex авторизации
- Backend: PDO MySQL + PHP
- Frontend: Bootstrap v4.6.1 + JQuery
- Установка в пару кликов
3
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.03.2023, 05:34
Ответы с готовыми решениями:

Почему для активной разработки сайтов не используют C# под Web
Почему для активной разработки сайтов не используют C# под Web, ASP.NET ?

Объясните новичку в выборе среды разработки (C/c++) web-сайтов под linux
Задача. Писать веб сайты на с по Linux'om. Не важно asp.net, c# и др. главное язык СИ или С++ ! Какая среда разработки это...

IDE для быстрой разработки
Друзья, прошу не ругать если данный вопрос уже поднимался. После нескольких дней поиска по Интернету, я всетаки не нашел ответ на...

76
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
04.04.2023, 15:46
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от avtobys Посмотреть сообщение
Но не вижу в этом смысла, абсолютно всё изолировать от контроллеров
читали книгу "Чистая архитектура" и прочие всеми рекомендуемые книги на тематику архитектуры?
Цитата Сообщение от avtobys Посмотреть сообщение
любой сервис надо ставить, плюс настраивать, он может перезапускаться периодически, что то ещё, а именно крон не должен от этого зависеть, потому что у него могут быть свои архиважные задачи.
Чего? Какой сервис. Я имею ввиду в рамках вашего проекта. т.е., например, не конкртено Memcached, а сервис в вашем решении реализующий задачи кеширования. И, главное, это на конкретном проекте надо решать, как кешировать в конкретной ситуации. Так то возможно вообще все задачи уйдут на Rabbit MQ
Цитата Сообщение от avtobys Посмотреть сообщение
Я так понимаю эти ссылки вы куда то записываете, верно? ок, а перезапускаем сервер, что с этой очередью будет?
Все нормально будет. Нет ни каких проблем абсолютно. Т.е. если важно гарантировано обойти. Значит забираем пачку, ставим метку в обработке (можно как пример временную метку использовать), ну перезагурзились (хоть вообще сервак железный полностью) все запустилось работаем дальше. Другая задача бдит за подвисшими. Если очередная ссылка числится "в обработке" больше N времени - убираем метку все оно в очереди


И потом, а у вас эти ссылки откуда берутся? Все равно вам ее надо где то взять и где то хранить. Защита от пропуска это вообще другая задача и реализуется вне зависимости от того как запускается скрипт, одинаково.
0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
04.04.2023, 16:52  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
книги на тематику архитектуры
нет
Цитата Сообщение от voral Посмотреть сообщение
Чего? Какой сервис. Я имею ввиду в рамках вашего проекта. т.е., например, не конкртено Memcached
ну тот же Memcached я и имею ввиду, это же сторонний сервис таки. А крон задачи это крон задачи, там просто своим решением кешить настройки потоков и состояние(включена/выключена) до каждого изменения строки задачи в бд, чтобы не подключаться в каждом потоке к ней.
Цитата Сообщение от voral Посмотреть сообщение
Если очередная ссылка числится "в обработке" больше N времени
вот это N времени, как раз очень важно, и не надежно, когда нужна космическая скорость запусков и полный реалтайм, когда они могут отваливаться в любой момент и т.д.
Цитата Сообщение от voral Посмотреть сообщение
И потом, а у вас эти ссылки откуда берутся? Все равно вам ее надо где то взять и где то хранить.
зачем её где то хранить?)))) запустили поток в фоновом режиме, он выполняется 3 дня например:
PHP
1
exec('(php -f ' . __DIR__ . '/thread.php &) > /dev/null 2>&1');
завтра пришли и проверили как там он, жив ещё или сколько их там у нас запущено?
PHP
1
$threads = intval(shell_exec("ps aux | grep 'php -f " . __DIR__ . "/thread\.php' | wc -l"));
и псё. Очень эффективно работает.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
04.04.2023, 17:12
Цитата Сообщение от avtobys Посмотреть сообщение
ну тот же Memcached я и имею ввиду, это же сторонний сервис таки. А крон задачи это крон задачи, там просто своим решением кешить
т.е. предлагаете в каждой задаче свой велосипед крутить? Я не имею ввиду же единый такой кеш, который любую задачу кеширует без разрешения. я про наличие инструмента, который можно применять везде. Вопрос лишь в том нужно кеширование или нет. Все о чем я вел изначально речь: возможность для проекта указать: я хочу хранить кеш в файлах на проекте или я хочу хранить в Redis. А далее в самом коде я уже работаю с сервисом не зная где он хранит, т.к. это не важно абсолютно.

Цитата Сообщение от avtobys Посмотреть сообщение
вот это N времени, как раз очень важно, и не надежно, когда нужна космическая скорость запусков и полный реалтайм, когда они могут отваливаться в любой момент и т.д.
1. Если вам нужен полноценный рантайм то реализация на задача это не разумно.
2. Это регулируется размером пачки. Хотите по одном запросу за раз обрабатываете.

Был у меня проект где опрашивали биржи. штук 20 примерно, изначально хотели вообще там раз в две секунды, потом поняли что это нафиг ни кому не надо. Ну а если потребуется, это уже надо делать в рамках отдельногомикросервиса.

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

Но все же давайте представим Вот есть 100500 страниц как у вас по шагам они будут обрабатываться, и в чем отличие от моего способа?
Откуда вы будете брать эти страницы?
Как будете понимать что другой процесс уже взял конкретную страницу?
Как будете понимать что другой процесс уже обрабатывает конкретную страницу?
Как будете понимать что другой процесс уже успешно обработал конкретную страницу?

Цитата Сообщение от avtobys Посмотреть сообщение
зачем её где то хранить?)))) запустили поток в фоновом режиме, он выполняется 3 дня например:
Не понятно. у вас есть 100500 сущностей которые необходимо обработать. Вы запустили один процесс, второй, десятый... как они будут понимать кто и что обрабатывает?

К тому же вы то про реалтайм то три дня.


Цитата Сообщение от avtobys Посмотреть сообщение
завтра пришли и проверили как там он, жив ещё или сколько их там у нас запущено?
Ну и чем это отличается?
Т.е. "завтра пришли" это означает что я посмотрю нет ли задач которые были запущенны вчера но не завершились. Т.е. у вас тот N равен суткам?
0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
04.04.2023, 18:12  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
Вопрос лишь в том нужно кеширование или нет
кеширование сторонними сервисами для крона не нужно, он не должен от них зависеть.
Цитата Сообщение от voral Посмотреть сообщение
Это регулируется размером пачки. Хотите по одном запросу за раз обрабатываете.
ps aux | grep чем вам не пачка?
Цитата Сообщение от voral Посмотреть сообщение
Но все же давайте представим Вот есть 100500 страниц как у вас по шагам они будут обрабатываться, и в чем отличие от моего способа?
Откуда вы будете брать эти страницы?
Как будете понимать что другой процесс уже взял конкретную страницу?
Как будете понимать что другой процесс уже обрабатывает конкретную страницу?
Как будете понимать что другой процесс уже успешно обработал конкретную страницу?
это очередность уже для конкретной программы(потока), это непосредственно программный уровень, назовем его так, он не должен зависеть от запуска потоков и контроля за их количеством - это другой уровень, системный назовем его так.
Вот к примеру стек для парсинга https://github.com/avtobys/par... .class.php
тут да, по вашей логике всё, пишется в файл стека, допустим ссылки парсинга(или просто id неважно что, для стека это ключи с таймаутами), им задается таймаут, в течении которого другой поток не может взять ту же ссылку, а должен взять "свободную", они удаляются по обработке, добавляются, можно обновлять таймауты и т.п. Это работа на уровне конкретного потока, это программный уровень.
А запуск потоков и контроль за их количеством происходит независимо от самих потоков https://github.com/avtobys/par... r/init.php это уже уровень другой - системный как уже сказал.
Цитата Сообщение от voral Посмотреть сообщение
К тому же вы то про реалтайм то три дня.
это для примера, он не равен у меня суткам, он равен полному реалтайм контролю через ps aux мы контролируем потоки, потому что нет смысла их писать в какие то файлы ещё, потому что они уже записаны в фс, дядюшка Линус об этом УЖЕ позаботился и всё записал, всё что вы видите в системе, является файлами, даже события, представьте себе и абсолютно любые процессы в линукс - это всё файлы. Всё происходящее в системе это файлы! И даже не спорьте, а то я вам своих книжек насоветую))) А ps aux мы их просто выводим и можем посчитать и проконтроллировать эти процессы. Это системный уровень, зачем дважды что то писать куда то, если всё уже записано и можно просто взять и посмотреть.
Цитата Сообщение от voral Посмотреть сообщение
Т.е. "завтра пришли" это означает что я посмотрю нет ли задач которые были запущенны вчера но не завершились.
капец, вам нужен 1 и лишь 1 поток, с id 1, вы контролируете его через ps aux | grep 'php -r cron php 1', а потом запускаете или не запускаете, если он есть в процессах уже. То же самое с 1000 потоков. А то как долго они выполняются, это программный уровень опять же, может и неделю, а может 100мс.
Цитата Сообщение от voral Посмотреть сообщение
И опять же повторюсь. системный крон штука более надежная чем како то решение. Она выврененная и проверенная. Если будет падение - то только по причине самого запускаемого скрипта, у тут опять не важно как вы его запустили, он у вас упадет и там и там.
вот из этого и исходить нужно, что любая задача крон - это системный уровень. Только тут её можно запустить в 1000 потоков с их постоянным удержанием на этом уровне, чего в системном кроне вы не найдете.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
04.04.2023, 18:32
Цитата Сообщение от avtobys Посмотреть сообщение
кеширование сторонними сервисами для крона не нужно, он не должен от них зависеть.
т.е. на кроне вообще без кеширования?
жостко.... ладно, будем считать что это фича такая инструмента

Цитата Сообщение от avtobys Посмотреть сообщение
это очередность уже для конкретной программы(потока), это непосредственно программный уровень, назовем его так, он не должен зависеть от запуска потоков и контроля за их количеством - это другой уровень, системный назовем его так
Нет так не пойдет. тут как раз и вопрос в этом. Вы говорите что у вас регулируется. Я объяснил как это видится мне, а как это у вас реализовано на практике? Без ответа на эти вопросы нет смысла спрашивать. Я тоже тогда могу сказать: у нас вообще ни чего не отличается кроме того, что вы запускаете изначально через веб сревер, а я использую системный крон... все. Остальное это лишь вопрос алгоритма распределения между потоками. Но как ваш инструмент распределит мои потоки, как каждый поток в отдельности будет знать что делать?

Цитата Сообщение от avtobys Посмотреть сообщение
А запуск потоков и контроль за их количеством происходит независимо от самих потоков https://github.com/avtobys/par... r/init.php это уже уровень другой - системный как уже сказал.
Ясно ну пусть так. (правда по прежнему не понятно зачем это тащить через веб Оба варианта делают одно и то же. Просто у вас из коробки заложено дополнительная кухня.... что ж ок. пусть так.


Цитата Сообщение от avtobys Посмотреть сообщение
это для примера, он не равен у меня суткам, он равен полному реалтайм контролю через ps aux мы контролируем потоки, потому что нет смысла их писать в какие то файлы ещё, потому что они уже записаны в фс, дядюшк
Мы о разном говорим. т.к. вы считаете "распределение задач между потоками" коробкой. В моем случае соответственно нет тоже проблем с этим. ну перегрузили, включили - работа дальше пошла. все. тот мой таймаут - это внутри моей коробки. и он у вас тоже будет иначе потоки вполне могут либо начать одно и то же делать, либо что то забыть после перегрузки.... если ваш алгоритм без тамаутов. то он будет работать и в предлагаемом мной случае...


ладно. короче будем считать что это специфичная для вашего проекта штука.

Цитата Сообщение от avtobys Посмотреть сообщение
Только тут её можно запустить в 1000 потоков с их постоянным удержанием на этом уровне, чего в системном кроне вы не найдете
Никто не помешает мне это сделать это если очень приспичит. по вашей же схеме. т.е. будет один "пускач" и он уже рулит задачами. какие запустить какие распаралелить можно...

Только мне кажется, если бы у меня на проекте было это узким горлышком, я бы уже на сях написал многопоточное приложение . Или, как минимум, отдельным сервисом. На практике, подозреваю это не самая распространенная проблема в веб разработке


Просто есть ли смысл в 100 потоков..... Когда ядер 2 - 16
0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
04.04.2023, 19:44  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
т.е. на кроне вообще без кеширования?
на кроне своё собственное кеширование будет говорю же, но не сторонним сервисом просто.
Цитата Сообщение от voral Посмотреть сообщение
Нет так не пойдет. тут как раз и вопрос в этом. Вы говорите что у вас регулируется.
регулируется количество потоков и нагрузка серверная нагрузка.
Цитата Сообщение от voral Посмотреть сообщение
ни чего не отличается кроме того, что вы запускаете изначально через веб сревер, а я использую системный крон... все
через системный крон вы не проконтролируете количество потоков с нагрузкой сервера, чтобы их останавливать и не настроите им нужного количества для запусков
Цитата Сообщение от voral Посмотреть сообщение
как ваш инструмент распределит мои потоки, как каждый поток в отдельности будет знать что делать
вы на системный крон когда ставите команду вам крон как то контролирует программно этот поток что то распределяет в нем какую то программную логику вашу? Нет. Он просто запускает команду.
Здесь тоже самое, только плюс есть контроль за нагрузкой, количеством запускаемых потоков задач, их цикличность - т.е. поддержка в постоянном автозапуске.
Цитата Сообщение от voral Посмотреть сообщение
распространенная проблема в веб разработке
для парсинга или обработки каких то апи самое то.
Цитата Сообщение от voral Посмотреть сообщение
Просто есть ли смысл в 100 потоков..... Когда ядер 2 - 16
Конечно есть. И 1000 потоков на 8 ядрах всё хорошо может парсится и не нагружая особо. 10 парсов работало когда то, в 300-500 потоков каждый и вполне со смыслом на 8 ядрах, плюс ещё и пачка в сотню сайтов достаточно посещаемая сверху пригревала)))) потом конечно пришлось расширяться, то сильно перегревалось.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
04.04.2023, 20:07
Цитата Сообщение от avtobys Посмотреть сообщение
Конечно есть. И 1000 потоков на 8 ядрах всё хорошо может парсится и не нагружая особо. 10 парсов работало когда то, в 300-500 потоков каждый и вполне со смыслом на 8 ядрах
т.е. вы хотите сказать что 125 потоков (выполняющихся на одном ядре) работают быстрее чем 1 на одном ядре? Это типо только за счет того что практически вытесняют все остальное с этого ядра? Как это физически? Ведь в этом случае уже нет многопоточности реальной.... Хотя... Ладно это тема не из этой тематике....

Получается это вы создаете монолит для разного рода задач, в то время как многие стремятся делить проекты на микросервисы Странное несколько объединение. Парсинг это вообще отдельная задача и мешать ее в одном флаконе с инструментом для создания сайтов..... На мой взгляд не очень хорошая идея.

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

Цитата Сообщение от avtobys Посмотреть сообщение
десь тоже самое, только плюс есть контроль за нагрузкой, количеством запускаемых потоков задач, их цикличность - т.е. поддержка в постоянном автозапуске.
Ок. пусть так. Но все равно здесь использование вебсервера в этой схеме (даже на начальном этапе) кажется лишним.
0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
04.04.2023, 22:09  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
т.е. вы хотите сказать что 125 потоков (выполняющихся на одном ядре) работают быстрее чем 1 на одном ядре? Это типо только за счет того что практически вытесняют все остальное с этого ядра? Как это физически? Ведь в этом случае уже нет многопоточности реальной
Именно так! Извините, но в вашем контексте 125 потоков на 1 ядре, и что они там вытесняют у вас откуда и куда? На 1 ядре физически всегда лишь 1 системный поток ядра /sbin/init id 1, всё остальное - это его детки. Мы ж не обсуждаем тут с вами потоки системных ядер, кванты и как они работают. А в контексте "потоков" программы подразумеваются лишь отдельные процессы-программы, которые все исходят от основного процесса-потока системного ядра, который в свою очередь юзает 1 или 256 физических ядер переключаясь между ними.
Я именно о том, что 100 "потоков"(процессов) того же парсинга на 1 ядре, будет выполняться быстрее чем 1 "поток" этой же программы и вполне себе шустро, конечно. И в понимании многопоточности именно программы-процесса она будет многопоточной и вполне себе шустрой, и можно ещё запустить программы какие то, ждать не придется. Можете проверить, процесс sleep 100 в терминал и ваша 1 ядерная система не замрет на 100 секунд, можно ещё запускать процессы и пользоваться ею, вы не заняли ядро этим "потоком". php и всё остальное - такие же процессы, только посложнее. А в понимании ядра, оно физически естественно однопоточное. Если подробнее уже прям физически - внутреннее устройство линукс Брайан Уорд, там хорошо про потоки, ядра, процессы.
Цитата Сообщение от voral Посмотреть сообщение
Парсинг это вообще отдельная задача и мешать ее в одном флаконе с инструментом для создания сайтов
это крон с плюшечками своми, всего лишь, встроенный в инструмент, а что вы им будете делать, парсить или очень быстро куда-то что отправлять, обрабатывать многопоточно, это уже дело хозяйское, да и сайты тоже могут быть и не сайты вовсе.

Добавлено через 25 минут
просто в вашем понимании ваша программа-"поток" прям выполняет что то непрерывно и всегда чем то полностью загружена, но по факту у неё куча свободного времени, которое ядро распределяет между другими процессами. А вот если все ядра загружены полностью на 100% т.е. load average значение столько же сколько и ядер в системе, вот тогда уже потоки именно системные становятся в очередь и начинает подтормаживать системка. Вот для этого то и пригодится контроль за нагрузкой и он там тоже есть в отличии от системного крона.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
04.04.2023, 23:06
Цитата Сообщение от avtobys Посмотреть сообщение
просто в вашем понимании ваша программа-"поток" прям выполняет что то непрерывно и всегда чем то полностью загружена
Давайте только за меня не говорите
Прерываться то он прерывается, вопрос только на что и как. И на сколько целесообразно приводить в пример sleep.
0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
04.04.2023, 23:14  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
вопрос только на что и как. И на сколько целесообразно приводить в пример sleep
ок, не буду. Ну вот в том то и дело на что и как. Может и 1 процесс загрузить всю систему и все ядра, и поставить в очередь всё. А sleep такой же процесс, но попроще.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
04.04.2023, 23:22
А по существу, все же сделайте в первую очередь возможность обнвлений и ведения своего проекта отдельно от вашего кода. Чтобы ваш git репозиторий не мешал, и при обновлении не требовалось сайт закрывать для посетителей, ну и быстрый курс. Для примера: делаем новостной сайт, для этого.... и по полной программе. как создать свою сущность "новость", как ее в базе хранить как доставать. Чтобы действительно можно было пробовать. Да и чтоб тестовые эти все данные можно было кнопкой удалить из системы.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
07.04.2023, 10:08
Было время - пробежался по коду. (все конечно просто личное мнение)
Еще очень обращает внимание плохая читаемость структуры. Т.е. ведь и распределение по каталогам, название классов и методов.

Такое ощущение что каталоги лежащие на первом уровне system вполне себе еще можно распределить по группам/по фичам.

Кроме того вот увидел я в коде обращение к классу Wrong\Html\Get у вас написано , что инструмент для опытных. у опытных get наверняка ассоциируется с геттером, а тут аж целый класс геттер. Ну ок наверняка он возвращает html по каким то параметрам. Смотрим внутрь.

style - минифицирует при необходимости стили и возвращает их обернутыми в style. Во первых две задачи: и минифицирует и затаскивает содержимое файла в html....
А если я решил подтянуть аяксом какой то файл стилей мне уже не судьба его минифицировать?
А если я не хочу чтоб он в html втягивался?
А если у меня это дев сервер и мне нужен мап файл (а вы убираете упоминание о нем) безальтернативно?

Так же возникает вопрос зачем менять время доступа исходного файла?
Кстати, логично проверять не только наличие файла min, но сравнивать время правки исходника и минифицированного. Если исходник новее - значит надо генерировать минимальный.

Со script та же история.

Hideout::add_assets_path - то же не состыковка имени класса, и то что он может делать.


Hideout::hide - тут сама идея странновата. т.е. на стадии создания шаблона я расставляю блокам data-target, dtat-action. А если мне блок не нужен для нескольких вариантов data-target, data-action? При этом html будет на клиенте всегда, т.е. он может видеть то, что не хотелось бы ему показывать. Мне кажется было бы логичнее иметь в системе класс пользователя отвечающий за права. И уже при формировании шаблона разработчиком дать возможность сделать типа:
PHP
1
2
3
if ($user->hasAccess('....')) {
/// добавление блока
}
Кроме того, это решение рассчитано на то, что работа идет с полноценной страницей HTML (есть привязка к тегу head). А если я в ответ на ajax захочу кусок кода отдать (с учетом вашего подхода к разграничению прав)?

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

Например, PHPStorm (самая популярная IDE в этой сфере). В редакторе справа все пестрит серыми, желтыми и даже красными метками. Что говорит о том что анализатор кода видит проблемы. Мелочь, но исправить очень просто.

Так же порекомендовал бы почитать и проникнуться книгами Чистый код, Чистая архитектура, Вон Вернон: Реализация методов предметно-ориентированного проектирования, Эрик Эванс: Предметно-ориентированное проектирование (DDD). Структуризация сложных программных систем .... Есть и еще крутые книги в этой тематике.


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

Так же вот вспомнил. Возможно будет интересен подход, посмотрите, думаю не пожалеете и подчерпнете идеи серия видео
0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
07.04.2023, 11:45  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
А если я решил подтянуть аяксом какой то файл стилей мне уже не судьба его минифицировать?
А если я не хочу чтоб он в html втягивался?
значит не подключаете его данным способом, а подключаете сразу свою минифицированную версию или аяксом, кто мешает вам это сделать? А ещё лучше stylesrc методом - его плюс в том, что он автоматически добавит в строку запроса время модификации вашего файла, т.е. гарантированно избежите кеша, и мап ваш там будет. Тоже и со скриптами.
Цитата Сообщение от voral Посмотреть сообщение
Так же возникает вопрос зачем менять время доступа исходного файла?
Кстати, логично проверять не только наличие файла min, но сравнивать время правки исходника и минифицированного. Если исходник новее - значит надо генерировать минимальный.
там так и делается, проверяется наличие мин версии, или если она есть то сравнивается время. Если мин версии нет или время версий не совпадает, генерируется мин версия, обоим в этот момент проставляется одинаковое время модификации. А иначе отдается уже готовый мин файл.
PHP
1
2
3
4
5
6
7
8
9
10
if (!file_exists($minifed_path) || filemtime($minifed_path) != filemtime($filename)) {
            $minifier = new Minify\CSS($filename);
            $data = $minifier->minify($minifed_path);
            touch($minifed_path);
            touch($filename);
            clearstatcache(true, $minifed_path);
            clearstatcache(true, $filename);
        } else {
            $data = file_get_contents($minifed_path);
        }
на главной как пример для аякс подгрузки, fancybox например через аякс подтягивается, тоже можно добавить время модификации методом
PHP
1
Wrong\Html\Get::pathArrayJSON(['/assets/system/css/fancybox.min.css'])
Цитата Сообщение от voral Посмотреть сообщение
Hideout::add_assets_path - то же не состыковка имени класса, и то что он может делать.
да согласен, он там к названию класса отношения не имеет, ещё раскидывать нужно по логике неймингов
Цитата Сообщение от voral Посмотреть сообщение
Hideout::hide - тут сама идея странновата
для каких то не критичных мелких моментов самое то - автоматом скрывать недоступный функционал. А так да будут шаблончики с ограничением прав.
Цитата Сообщение от voral Посмотреть сообщение
Мне кажется было бы логичнее иметь в системе класс пользователя отвечающий за права.
это отличная мысль, полностью поддерживаю! Только тут нужно будет сделать 2 метода - чека, на просто доступ и чек на изменение, аля:
PHP
1
2
$user->hasAccess(...);
$user->hasAccessWrite(...);
сейчас это всё делается чз "одно место" конечно, вырви глаз, самому неудобно, тем более что проверки доступов - это момент важный.
Цитата Сообщение от voral Посмотреть сообщение
В редакторе справа все пестрит серыми, желтыми и даже красными метками. Что говорит о том что анализатор кода видит проблемы.
у меня vscode, анализатор для 7.4 php не пестрит совсем ничем.
Цитата Сообщение от voral Посмотреть сообщение
будет интересен подход, посмотрите, думаю не пожалеете и подчерпнете идеи
спасибо, гляну!
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
07.04.2023, 12:03
Цитата Сообщение от avtobys Посмотреть сообщение
значит не подключаете его данным способом, а подключаете сразу свою минифицированную версию или аяксом, кто мешает вам это сделать?
т.е. я сделаю свою велосипед имея такой функционал? При этом если бы вы разделили по ответственностям - то я мог бы использовать ваш готовый инструмент. Ведь речь ведется не о том, что не возможно это сделать, а в том, что инструмент можно легким движением сделать более гибким

Цитата Сообщение от avtobys Посмотреть сообщение
там так и делается, проверяется наличие мин версии, или если она есть то сравнивается время.
Сори, проморгал Но время модификации источника мне кажется лишним движением.

Цитата Сообщение от avtobys Посмотреть сообщение
у меня vscode, анализатор для 7.4 php не пестрит совсем ничем
Я переключал его на 7.0, 7,1, 7.4 - везде есть замечания.
У меня полно Причем у меня нет каких то конфигов специфичных. тут вообще в такого рода проектах может сразу применить что то типа PSalm, phpstan .

Кстати, заодно, хорошо бы добавить в composer.json

Code
1
2
3
4
    "require": {
.....
      "ext-json": "*"
    },
И еще какие то ранее видел требующиеся расширения. Они же не обязательно ставятся по умолчанию в систему, а тут бы композер сразу показал если что (это кстати анализатор мне показал)
0
6 / 9 / 2
Регистрация: 26.07.2021
Сообщений: 48
07.04.2023, 13:27  [ТС]
Цитата Сообщение от voral Посмотреть сообщение
т.е. я сделаю свою велосипед имея такой функционал?
а как вы мап выведете сразу в код там, если у вас request допустим /cat/page а мап ваш лежит в /assets/css/... где то. Он же не найдется, он же будет искаться по относительному пути. Это один способ, он для того чтобы заинжектить именно в вывод страницы, там мап да вырезается. Вы имеете ввиду чтобы тот же функционал методу stylesrc ещё добавить, да, только мап там не резать? Да пригодится, сделаю.
Цитата Сообщение от voral Посмотреть сообщение
Но время модификации источника мне кажется лишним движением.
да, возможно, перестраховка
Цитата Сообщение от voral Посмотреть сообщение
ext-json
будет для pdo, curl, json, openssl проверки
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
07.04.2023, 13:38
Цитата Сообщение от avtobys Посмотреть сообщение
ы имеете ввиду чтобы тот же функционал методу stylesrc ещё добавить, да, только мап там не резать?
я больше о том, что этот метод разделить. Т.е. один занимается минификацией, другой готовит тег script.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
21.04.2023, 14:53
Посмотрел на реализацию кеширования.

Не думали над применением похода внедрения зависимостей (Dependency injection или DI) в данном случае и вообще? Вот вы реализовали кеширование на файлах, но я могу захотеть что то иное, вообще свое. (причины могут быть разные). Да я видел, что есть второй параметр у конструктора Cache но он опять же не дает возможности реализовать свое.

А если бы так (пример на 8ке - местами более лаконично получается, просто что б пояснить мысль):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
interface CacheInterface
{
    public function __construct(string $prefix = 'cache');
 
    public function set(string $key, mixed $value, int $timeout);
 
    public function get(string $key): mixed;
// ИТД
}
 
// Это ваш класс файлового кеширования
class FileCache implements CacheInterface
{
 
    public function __construct(string $prefix = 'cache')
    {
    }
 
    public function set(string $key, mixed $value, int $timeout)
    {
 
    }
 
    public function get(string $key): mixed
    {
        return 1;
    }
}
 
// Вынес из вашего Cache функционал по выбору стратегии
class CacheFactory
{
    // Можно на enum потом переделать, чтоб не давало фигню передать
    public const FILE = 'files';
 
    public function get(string $type = self::FILE): CacheInterface
    {
        return match ($type) {
            default => new FileCache('cache')
        };
    }
}
 
class Environment
{
 
    public function __construct(private ?CacheInterface $cacheService = null)
    {
    }
 
    /**
     * @return CacheInterface
     */
    public function getCacheService(): CacheInterface
    {
        if (!$this->cacheService) {
            $this->cacheService = (new CacheFactory())->get();
        }
        return $this->cacheService;
    }
}
 
class Template
{
    public function __construct(private readonly Environment $environment)
    {
    }
 
    public function require(int $template_require_id):void{
        $cache = $this->environment->getCacheService();
    }
}
Т.е. вы делаете все же инструмент для веб разработки. А для инструмента важно (важнее чем в конечном продукте) гибкость.




Не по теме:


Вам бы еще все же изыскать возможность перейти на 8.1 - 8.2, а то пишите на версии, которая уже не поддерживается, а скоро даже обновления безопасности не будут выходить для нее. При этом в 8ке есть удобное и полезное :)



Добавлено через 2 минуты
А если возьмете на вооружение PSR то можно будет легко подключить уже готовые решения, пока своих мало. (если в них будет необходимость)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.04.2023, 14:53

Софт для быстрой разработки страниц
Собственно и весь вопрос...что посоветуете??? ось желательно семёрка..

Поиск технического партнера в стартап - продукта для быстрой разработки проектной документации (Robodoc)
Привет, всем!) Заброшу удочку в поисках партнера в стартап. Я являюсь основателем программного продукта для быстрой разработки проектной...

Ищу команду для разработки сайтов
Имеется очень огромный объем работы, нужны ответственные люди, с желанием работать. На данный момент интересуют, верстальщики со знанием...

Собираю команду для разработки сайтов
Я собираю команду для разработки сайтов на html php MySQL CSS. Есть идея по созданию крупного и интересного интернет проекта! Пишите здесь,...

Собираю команду для разработки сайтов
Всем привет! Наверняка подобные темы встречаются очень часто поэтому буду не первым) Перейдем к сути дела: Я собираю команду для...


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

Или воспользуйтесь поиском по форуму:
77
Ответ Создать тему
Новые блоги и статьи
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru