Файлы и модели в Coresky - energy-coresky/air GitHub Wiki
Код первого крыла, содержащий классы SKY и HEAVEN, находится в файле sky.php. Файлы второго крыла в папке w2 (wing 2), смотрите таблицу:
Файл | Строк, размер |
Функций, классов |
Описание |
---|---|---|---|
boot.php | 198 7.5 kB |
0, 1 | класс генерации главного кэш-файла Coresky - sky_plan.php, который используется всегда |
console.php | 456 16.9 kB |
0, 1 | класс для использования в консольных скриптах. Используется скриптом sky. Этот класс умеет расширять список команд Coresky, консольными командами приложений и продуктов |
core.php | 583 18.9 kB |
33, 5 | код ядра Coresky. Загружается всегда, вместе с классами SKY и HEAVEN |
css.php | 184 6.2 kB |
0, 1 | класс CSS для работы со стилями css |
dc_file.php | 72 1.8 kB |
1, 1 | драйвер кэша для для файловой системы (dc - DriverCache) |
dc_memcached.php | 81 2.3 kB |
1, 1 | 2do драйвер кэша |
dc_redis.php | 82 2.3 kB |
1, 1 | драйвер кэша для Redis |
dd_mysqli.php | 219 7.6 kB |
0, 1 | драйвер для MySqli (dd - DriverDatabase) |
dd_oci.php | 134 3.3 kB |
0, 1 | драйвер для Oracle |
dd_odbc.php | 134 3.3 kB |
0, 1 | 2do драйвер для ODBC |
dd_pg.php | 132 3.5 kB |
0, 1 | драйвер для Postgres |
dd_sqlite3.php | 176 5.3 kB |
0, 1 | драйвер для SQLite3 |
debug.php | 315 12 kB |
0, 1 | вспомогательный код для режима debug |
dev.php | 499 19 kB |
0, 1 | основной код инструмента разработки, только DEV |
dev_c.php | 429 15.8 kB |
0, 1 | контроллер web-инструмента разработки, только DEV |
form.php | 550 21.2 kB |
0, 2 | функционал для создания Coresky форм |
gate.php | 504 20.2 kB |
0, 1 | компилятор SkyGate для контроллеров |
globals.php | 531 20 kB |
0, 1 | функционал для поиска определений кода Coresky и кода приложений. Используется в "Global Reports" |
install.php | 342 13.1 kB |
0, 1 | функционал для задач, связанных с установкой приложений. Используется только на DEV, в утилите "Open SkyProject" |
jet.php | 555 21.2 kB |
0, 1 | компилятор представлений Jet |
js.php | 129 4.5 kB |
0, 1 | парсер Javascript |
language.php | 592 23 kB |
0, 1 | класс для организации мультиязычных приложений Coresky. Используется только на DEV |
md.php | 350 12.7 kB |
0, 1 | парсер Markdown (follow CommonMark) |
mvc.php | 546 18.3 kB |
1, 8 | основные классы для организации MVC паттерна Coresky. Используется всегда при обработке web-запросов |
php.php | 439 17.4 kB |
0, 1 | парсер PHP |
plan.php | 529 22 kB |
2, 2 | класс для реализации системы планов и продуктов Coresky. Загружается всегда, вместе с классами SKY и HEAVEN. Использует драйверы с префиксом dc_ |
rare.php | 365 14 kB |
0, 1 | здесь содержится функционал, который используется редко, но нужен всегда, например, Rare::login(..)
|
rewrite.php | 249 8.3 kB |
0, 1 | функционал для настройки Coresky rewrite, только DEV |
root.php | 517 24.8 kB |
0, 1 | функционал для диагностики и управления ядром Coresky. Используется в инструментах разработчика на DEV. Также может использоваться в root-админ разделе или на специальных страницах приложения на продакшн |
saw.php | 268 10.2 kB |
0, 1 | трейт "Пила", используется в классе Jet. Читайте статью о парсерах Coresky |
schedule.php | 246 8.4 kB |
0, 1 | класс для организации консольных cron скриптов. Задачи могут выполняться в параллельных отдельных процессах. Реализуется с помощью функции PHP popen(..)
|
show.php | 553 23.1 kB |
0, 1 | функционал для отображения разных типов данных |
sql.php | 469 16.7 kB |
0, 3 | стандартные классы для работы с реляционными базами данных. Используют драйверы с префиксом dd_ |
svg.php | 21 631 Bytes |
0, 1 | класс для работы с SVG |
user.php | 221 8.4 kB |
0, 1 | базовый класс USER, для организации сессий и аккаунтов пользователей. Может быть заменен или расширен кодом приложения |
vendor.php | 165 6.4 kB |
0, 1 | класс для работы пакетами Composer, только DEV |
wares.php | 28 621 Bytes |
0, 1 | класс, наследуемый классами-инсталляторами продуктов, только DEV |
xml.php | 419 14.7 kB |
0, 1 | класс XML для работы с xml и html данными |
yml.php | 593 22.8 kB |
1, 1 | парсер Coresky Yaml
|
zml.php | 79 2.4 kB |
0, 1 | класс поддержки ZML формата |
_data.yaml | 210 8 kB |
0, 0 | Yaml данные: конфигурации и другие данные парсеров, определения форм для класса Root и т.д. |
_helper.yaml | 165 7.2 kB |
0, 0 | вспомогательный код для _nice_php.yaml
|
_nice_php.yaml | 482 16.2 kB |
0, 0 | код для "Пилы" (Coresky SAW) для генерации кода второго этапа бьютифаера PHP |
__dev.jet | 472 14.8 kB |
template | layout-шаблон, а также прочие шаблоны инструментов разработки, включая страницы "Main" и "Browse All Wares", только DEV |
__glob.jet | 410 14.1 kB |
template | шаблоны для страницы "Global Reports", только DEV |
__inst.jet | 286 11.1 kB |
template | шаблоны для страниц "Open SkyProject", только DEV |
__lng.jet | 467 18.1 kB |
template | шаблоны для страниц "Open SkyLang", только DEV |
__std.jet | 544 19.6 kB |
template | стандартные шаблоны ошибок, а также, шаблоны для страниц "Open SkyGate" |
__vend.jet | 222 7.3 kB |
template | шаблоны для страниц "Browse All Vendors", только DEV |
Всего в папке w2: 49 файлов. Другой основной код Coresky, смотрите в следующей таблице:
Файл | Строк, размер |
Описание |
---|---|---|
sky.php | 567 22.2 kB |
код первого крыла, классы SKY и HEAVEN |
sky | 83 2.3 kB |
скрипт для выполнения команд в консоли. Рекомендуется прописать к нему путь в переменной окружения PATH |
etc/moon.php | 825 33.7 kB |
standalone инсталлятор sky-приложений, упакованных в файл с расширением *.sky |
assets/database.yaml | 191 145.6 kB |
база данных Yaml: содержит некоторые изображения, часовые пояса, языки планеты Земля (ISO 639-1), группированные токены PHP и т.д. Другие файлы Yaml, могут включать этот файл в магическом маркере и использовать данные БД как свои: @inc(.timezones)
|
assets/dev.css | 372 6.7 kB |
стили для инструментов разработчика, только DEV |
assets/dev.js | 381 14.3 kB |
javascript код для инструментов разработчика, только DEV |
assets/sky.css | 171 3.4 kB |
стили для всех sky-приложений, работающих с web-интерфейсом. 2do: remove in the future |
assets/sky.js | 289 9.7 kB |
javascript код для всех sky-приложений, работающих с web-интерфейсом. В файле определены функции и методы для реализации действий контроллеров с префиксом j_*, код для валидации Coresky форм, а также другой важный код |
Итого Coresky это: 57 файлов, 19091 строк кода, 835.1 kBytes. В глобальной области видимости: 40 именованных функций PHP, 58 классов PHP, из них 3 интерфейса, 4 трейта и 0 перечислений.
Любой код для повторного использования, содержит некоторые части кода, которые используются чаще или реже в различных веб-приложениях написанных на нём. Если вообразить, что все веб-приложения на Земле (или хотя бы большая, значительная их часть), переписаны с использованием некоторого единого кода для повторного использования, который значительно помог упростить разработку этих приложений, то окажется, что часть такого кода, используется всегда. Имеет смысл разделить код для повторного использования, по частоте потенциально возможного применения. Назовем "крыло 1" (wing 1), код, который используется всегда. Такому коду следует уделить наибольшее внимание. Другой код Coresky - крыло 2, содержится в папке wing 2 (main/w2). В папке main/w3 (крыло 3) содержатся классы продуктов и код приложений. Остальной код приложений (контроллеры, модели и представления) уникален, явно наследует повторяющуюся архитектуру MVC и использует код крыльев 1,2,3. Классы в папке main/mvc всегда имеют однобуквенные префиксы и постфиксы в противоположность классам крыльев, это гарантирует, что их имена не пересекутся. Для классов в папках main/w3, рекомендуется использовать нотации без подчеркивания: PascalCase или camelCase.
Классы Coresky, кроме SKY и HEAVEN находятся в папке main/w2. Этот список всегда можно увидеть с помощью утилиты "глобальные определения". Для классов крыльев, в том числе в папке main/w3 продуктов, необходим глобальный реестр (и модерация продуктов) в репозитории кода Coresky для обеспечения уникальности имен, в том числе с классами PHP. Это скорее хорошо, чем плохо: к сожалению, в репозитории https://packagist.org/ много мусорного кода. Кроме того, продукты могут содержать классы, использующие пространства имен, которые соответствуют именам продуктов. Классы с namespace рекомендуется использовать для PROD-продуктов. Читайте о разрешении коллизий в именах в статье "Coresky планы и продукты".
Контроллеры и модели приложений, располагаются в папке main/mvc. Первые имеют однобуквенный префикс или постфикс c_ в имени файлов, а модели, в основном, используют префикс m_ или t_. Классы моделей приложений, должны наследовать базовые классы Model_m
и Model_t
соответственно, смотрите файл main/w2/mvc.php. Другой код, осуществляющий бизнес логику приложений, для которого не требуется наследование вышеуказанных базовых классов, располагается в папке main/w3. Ядро Coresky осуществляет автозагрузку классов, для любого такого кода, автоматически и для основного приложения и для продуктов.
М-модели это "пустышки", точнее они содержат некоторый функционал, но класс Model_m
является базовым для определений других базовых моделей, например Model_t
. Тем не менее, можно создавать модели приложений на базе М-моделей, если базовые методы модели Model_t
не нужны и/или код модели не связан с конкретной таблицей в некоторой базе данных. Пример файла main/mvc/m_test.php:
class m_test extends Model_m
{
protected $table = 'tbl';
function head_y() {
return SQL::open('other-db-connection');
}
function some_row() {
return $this->sql('-select * from $_ where id=1');
}
}
В примере выше - перегружено свойство protected $table
и метод m_test::head_y()
. Свойство переопределяет дежурную таблицу, а метод - соединение с БД по умолчанию. Обычно, такую перегрузку делать не нужно, так как дежурная таблица может установится автоматически по имени класса модели (test). А соединение с БД скопируется автоматически из соединения по умолчанию в классе SQL - SQL::$dd
.
В таких моделях можно использовать прототипы глобальных функций sql(..)
, sqlf(..)
, qp(..)
, вызывая их через $this->
. В этом случае будет использоваться дежурная таблица и соединение с БД, определенные в модели. Метод ::head_y()
всегда вызывается автоматически, во время выполнения конструктора класса. Его рекомендуется использовать (а не конструктор класса), если алгоритмически нужна некоторая инициализация модели.
Из контроллеров и моделей, доступ к другим моделям, осуществляется без использования каких-либо специальных действий. Создание объекта модели, выполняется автоматически при первом вызове, в магическом методе __get(..)
, далее объект используется как singletone. Редко, но все-же, может потребоваться второй экземпляр объекта модели, в этом случае используйте new
:
class m_test extends Model_m
{
. . .
function method() {
# nothing special to access other model, do not required:
# include file, operator new, dependency injection
$r = $this->m_other_model->method(); # create instance & run method
echo $this->m_other_model->public_property; # access same instance
# use `new` for second instance
$second_instance = new m_other_model;
$r2 = $second_instance->method();
}
}
Такие модели следует использовать, когда необходимо привязать код модели к некоторой конкретной таблице в БД. Имя класса модели следует выбирать в соответствии с именем таблицы с префиксом t_. Например, для таблицы article - класс t_article
, файл - main/mvc/t_article.php.
Базовый класс Model_t
, в сравнении с Model_m
, дополнительно содержит методы, которые можно использовать в T-моделях приложений. В основном это методы-обертки для сокращения кода работы с SQL запросами:
Model_t::where($rule)
- для составления кляузы WHERE
Model_t::cell($rule = '', String $what = 'count(1)')
- для чтения единственного значения из БД
Model_t::one($rule = null, String $pref = '>')
- для чтения одного ряда значений из БД
Model_t::all($rule = '', $what = '*', String $pref = '#')
- для чтения всех рядов результата запроса к БД
Model_t::insert(Array $ary)
- для вставки ряда данных в БД
Model_t::update($what, $rule = null)
- для обновления данных в БД
Model_t::delete($rule = null)
- для удаления данных из БД
Во всех методах выше, подразумевается работа с дежурной таблицей модели. Их можно использовать не создавая файл с определением модели, в этом случае, нужно передать имя таблицы в конструкторе класса Model_t
:
class m_test extends Model_m
{
. . .
function method($table = 'variable_name') {
$all_rows = (new Model_t($table))->all();
. . .
}
}
В T-моделях, при вызове методов моделей, также происходит переключение соединения с БД по умолчанию и дежурной таблицы в классе SQL, так что можно использовать глобальные функции sql(..)
, sqlf(..)
, qp(..)
, а не их протоnиты с $this->
. И по шаблону $_ будет подразумеваться таблица, определенная как дежурная в текущей модели (и соединение с БД).
Модели продуктов, использующие пространства имен, могут быть сохранены в файлах с префиксом x_. Создание экземпляров таких моделей из потомков MVC_BASE
также производится с помощью этого префикса, например $this->x_able
. Но внутри файла, префикс имени класса модели должен быть m_ или t_. Смотрите определение модели из продукта Upload, файл upload/mvc/x_able.php:
<?php
namespace upload;
class t_able extends \Model_t
{
. . .
}
Префикс x_ сообщает ядру Coresky, что необходимо сделать автозагрузку такой модели и создание её экземпляра класса, которая использует пространство имен. Подразумевается, что имя namespace совпадает с текущим Plan::$ware
.
Виртуальные X-модели используются для разрешения возможных коллизий в именах классов PROD-продуктов и моделей кода приложений.
В папке mvc можно также создать модели наследующие, например базовый класс MVC_BASE
с произвольным префиксом, например файл y_test.php:
<?php
namespace warename_or_main;
class y_test extends \MVC_BASE
{
function __construct() {
# your own code
}
. . .
}
В этом случае, создание экземпляра класса будет возможно только с помощью new
:
$instance = new \warename_or_main\y_test();
Рассматривается целесообразность создания других базовых классов моделей, например `Model_q` для составления запросов к БД в стиле Query builder.