Open ildar-ceo opened 3 months ago
Еще пример:
<?php
use Runtime\rs;
use Runtime\RenderContainer;
use Runtime\Request;
/* Create container and layout */
$container = new RenderContainer();
$container->createLayout("Runtime.BaseLayout");
/* Find route */
$container->setRequest(new Request());
$container->findRoute();
/* Run route */
$container->resolveRoute();
/* HTML */
?><html lang='<?= rs::escape_attr($layout->lang) ?>'>
<head>
<title><?= rs::escape_html($layout->title) ?></title>
</head>
<body>
<div class="root_container"><?= \Runtime\rtl::render($layout) ?></div>
<script>
var layout = <?= json_encode($layout->exportData()); ?>;
window.app = Runtime.rtl.mount(var layout, document.querySelector(".root_container"));
</script>
</body>
</html>
Скорее всего RenderContainer, Request, findRoute, resolveRoute должны содержать абстракции, а их реализации будут разные и отличаться от языка и фрэймворка, где работает BayLang
Вместо
$container->resolveRoute();
Должно быть
$container->loadData();
Суть в том, чтобы загрузить данные модели из базы данных. У каждой модели есть метод loadData, который предполагается использовать для вызовы RPC методов бэкенда, которые предоставят данные из базы данных, используя DTO объекты. DTO объект это часть модели. Фактически задача ORM делать запросы в базу и формировать эти DTO объекты, а также сохранять эти объекты обратно в базу. Простейший пример DTO объектов это Vector, Map, а также примитивные типы данных.
Идея в том, чтобы создать чистый BayLang, который может работать нативно в js, php с минимум загружаемых runtime библиотек. Сейчас runtime библиотека много весит. Задача убрать все лишнее и оставить только необходимое.
Скорее всего runtime будет состоять из:
Также нужно убрать зависимость от vuejs и сделать свою рендер функцию, которая будет нативно патчить html элементы в DOM без необходимости создавать VirtualDom
Context, Entity, Provider скорее всего будут перенесены в Runtime.Web
Минимальная версия BayLang необходима для интеграции с другими фреймворками, такими как Laravel, Symfony и т.п. Дело в том, что BayLang 0.12 реализует похожий функционал, который есть в популярных фреймворках. Например роутинг, api, обработка HTML запросов и т.п. Поэтому в минимальной версии дублирование функций нужно убрать.
Пример hello world на BayLang:
Модель:
Шаблон:
PHP: