Александр Воробьев

Александр Воробьев
Рейтинг
56
Регистрация
03.02.2020
Sly32 #:
Ну и замечание - категорически против использовать html тэги в шаблонизаторе - очень сильно загрязняет код. Давно уже стандарт использовать {{ }} для статики
и {% %} для исполняемого кода.
вот, блин, ты "подбил на взлете"....  за обедом подумал, что тут даже проще реализация будет и разбор более производительный (на первый взгляд) должен получиться. так же я как раз заткнулся на реализации <j-if><j-elseif><j-else></j-if>   а тут вообще как будто этот момент упрощается
Sly32 #:
Жду докер, чтобы поиграться самому)
git clone https://github.com/Voral/joke-minimal my-app
cd my-app
docker compose up -d

Видео на youtube
Sly32 #:
- Роутинг позволяет выстраивать запросы любого вида уже? Как с параметрами, так и без?

Вот пример на котором я "игрался" при разработке на гитаб


/**
* @var Router $router
*/

$router->get('/', fn() => <<<HTML
<ul>
    <li><a href="/name/Alex">Hi Alex</a> Текстовый ответ. Имя можно менять</li>
</ul>
HTML
);
$router->get('/name/{name:slug}', fn(string $name) => 'Hi ' . $name, 'hiName');
$router->get('/json/{name:slug}', fn(string $name) => ['fio' => $name]);
$route = $router->get('/name-filtered/{name:slug}', fn(string $name) => 'Hi ' . $name)->addGroup('filtered');
$router->get('/invoke/{prop}', InvokeController::class);
$router->get('/shop', [SingleController::class, 'index']);
$router->get('/shop/info', SingleController::info(...));
$router->get('/shop/infoNew', SingleController::class . '::info');
$router->get('/shop/{filter}', [SingleController::class, 'find']);

$router->get(
    '/csrf',
    fn(Vasoft\Joke\Core\Request\HttpRequest $request) => [
        'csrf' => $request->session->get(
            CsrfMiddleware::CSRF_TOKEN_NAME
        )
    ]
);
$router->delete(
    '/csrf',
    fn(Vasoft\Joke\Core\Request\HttpRequest $request) => [
        'csrf' => $request->session->unset(
            CsrfMiddleware::CSRF_TOKEN_NAME
        )
    ]
);
$routeHandler = fn(Vasoft\Joke\Core\Request\HttpRequest $request) => [
    'id' => spl_object_id($request),
    'get' => $request->get->getAll(),
    'post' => $request->post->getAll(),
    'files' => $request->files->getAll(),
    'json' => $request->json,
];

$router->post('/queries', $routeHandler);
$router->put('/queries', $routeHandler);
$router->patch('/queries', $routeHandler);
$router->head('/queries', $routeHandler);
$router->get('/{*}', static fn(string $path) => new HtmlResponse()
    ->setStatus(ResponseStatus::NOT_FOUND)
    ->setBody("Запрошен несуществующий путь: {$path}"));
Sly32 #:
Жду докер, чтобы поиграться самому)

Хм. я планировал про докер с готовым приложением :) ок, разберусь и сделаю "для разработки"  

У меня у самого как то с докером не сложилось в практике: большинство проектов без докера, а брать на себя роль и сисадмина, к тому же свои коррективы вносит то, что проекты в основном на Битрикс (а там контент менеджер через интерфейс может менять файлы).... а так  у меня установлено с 14 года апач и bind9 в которые я конфиги просто скопировал с предыдущего компа... и все работает :)  Пробовал ставить себе докер - у меня начались какие то непонятки : браузеры на любом сайте постоянно стали сбрасывать соединение.  :)  в общем в этом плане я не продвинутый :)  но постараюсь разобраться. может у той же лары подгляжу - сделаю

Sly32 #:
Ну и замечание - категорически против использовать html тэги в шаблонизаторе - очень сильно загрязняет код. Давно уже стандарт использовать {{ }} для статики
и {% %} для исполняемого кода

Вообще я хотел изначально сделать %%...%% (у меня моя CMS так работала когда то). тут пошел из идеи: если тег не отработан, то он останется на странице и не будет виден. Правда пока писал этот текст осознал - у меня в этом случае бросается исключение. Подумаю.  в целом "переключить" совсем не проблема. 

Sly32 #:
у меня не грузится ваше вквидео

ужис :)  сейчас закину на ютуб

Итак вторая пятница (далее через две недели "отчеты")

Фреймворк

Выпустил первый релиз. Базовый функционал (естественно он очень минимальный) работоспособен. Вполне можно собрать какой то внутренний микросервис. Реализовано:

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

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

GitHub   Дока

Так же сделал скелетон, для старта с минимальным набором (в README описано)

composer create-project voral/joke-minimal my-app

Видео

Видео записал не в формате "показать что у меня внутри" тут, если у кого то будут вопросы, готов ответить, а выдавливать из себя... хз... (я вообще наверно первый раз лет за 30 столько говорил без перерыва :) )

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

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

Основная разработка сейчас здесь. Реализованы сейчас базовые теги <j-echo>, <j-if></j-if>, <j-each/> на их базе отработал построение AST дерева, рендер в HTML. Но осознал, что выполнять сразу полный рендер  HTML это не правильно для динамических сайтов: по этому  будут следующие шаги:  лексер - парсер - рендер тегов отмеченных атрибутом static (сейчас на гитхабе версия с "j-static", но у атрибута префикс планирую убрать) - компиляция в PHP код. Т.е. на первом хите будет и построение AST дерева и компиляция php кода. На последующих (пока не сработают правила обновления кода) будет только выполнение PHP (естественно я пока опускаю, что будут и другие уровни кеширования).

Сейчас работаю над внедрением в шаблонизатор DI контейнера, что позволит и регистрировать свои теги и заменять те, что идут из коробки. В общем то можно будет заменить не только обработчики тега, но и например компилятор штатный заменить на компилятор который будет компилировать в любой другой ЯП, например в код на питоне :)

Репа шаблонизатора GitHub

Sly32 #:

Как это можно применить - не придумал))) 

Прикольно, интересно было бы узнать нет ли "родственных" душ в рамках форума :) 


PS. А у меня тем временем сегодня первый релиз (и фреймворка и скелетона для простого старта разработки на нем). постараюсь к пятнице видео запилить.  Начинается у меня череда ДР: отец, сын и я - друг за другом, "скорость" подспадет

Самое забавное, что бывало. И достаточно, на мой взгляд часто (за прошлый год раза два - три): я работаю по времени, соответственно его считаю (в toggl). Вот бывало по два дня подряд рабочее время за день совпадало секунда в секунду. Это при том, что я начинаю и заканчиваю рабочий день не по какому то особому "звонку", разные перерывы, в течении дня переключаюсь с задачи/на задачу,  с проекта/на проект (а это все остановить один таймер и включить другой.....

100%го рецепта нет.  Для примера ОЧЕНЬ частая причина для альцгеймера - некачественное спиртное. Т.е. вполне себе так есть шанс выпить - и все. И тут речь не конкретной паленке покупаемой с рук в подворотне.....  

А далее все как всегда: спорт, питание, упражнения для мозга.

Devstory #:
Говоришь бюджет и порекомендуй что по лучше за него, вот и все
Ой да ладно. Я как то даже не выдержал в эльдорадо: около меня консультант отвечал покупателю на вопросы про ноут, такую ересь говорил (про вайфай). так то было во времена когда  явно консультантов мотивировали на продажи. (сейчас зайдешь так там просто ходят цари которым все по.....)
Had #:
Но почти уверен не зайдёт это. Спроса не будет. Почему?
Как минимум должен быть уровень вашей экспертизы доказан.  Т.е. для создания своего имени придется очень сильно поработать. Да и потом 500 руб это 500 руб. Кто то (и достаточно много) боится рискнуть и меньшей суммой
Всего: 597