# LE Framework Introduction

## Предупреждение
>Данный продукт не является коммерческой версией, всё публикуется на уровне AS IS,
>цель всего проекта - обучение и просто по фану слепить что-то, для коммерческих приложений
>используйте что-то типа Laravel, Yii и подобные фреймворки, тут просто игрушка
>
>вполне возможно что из этого что-то выйдет пригодное к жизни, но сейчас тут просто публикуются примеры кода из видеоуроков с Youtube
>
>**Основная работа автора не связана с веб-разработкой**, но я пилю всякое такое на досуге ради спортивного интереса...
>
>весь публикуемый код не претендует на звание эталона, **это просто велосипед ради развлечения!**

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

В будущем на этом фреймворке можно будет создавать такие приложения, как:
* Консольные демоны (службы)
* Блоги и статейные сайты
* Интернет-магазины

## Структура приложения
```
├──./app_dir
│   ├── app_conf.php - конфигурация приложения
│   ├── /CLASSES - может отсутствовать
│   ├── /MODULES - может отсутствовать
│   ├── /TPL - может отсутствовать
│   ├── /sessions - создается автоматически, если нет
│   ├── /web - доступная веб-серверу папка
│   │   ├── /assets - статичные файлы, не меняются приложением
│   │   │   ├── /css
│   │   │   ├── /js
│   │   │   └── /etc
│   │   ├── /pub_data - публикуемые ресурсы типа картинок
│   │   └── index.php - точка входа
```

пример создания структуры
```bash
cd my_app
mkdir -p {CLASSES,MODULES,TPL,sessions,web} web/assets/{css,js,etc} web/pub_data
touch app_conf.php web/index.php
```

### index.php - точка входа
```php
<?php

define("APPDIR",realpath(__DIR__."/../").DIRECTORY_SEPARATOR);
include "/www/kernel/init.php"; //path to framework
```

### app_conf.php
```php
<?php 
/*DB CONFIGURATION*/
SYSCONF::$DB['db_name'] = 'project1';
SYSCONF::$DB['user'] = 'root';
SYSCONF::$DB['pass'] = '...';
//SYSCONF::$DB['host'] = 'localhost';

//дефолтный модуль в корне сайта...
SYSCONF::$DEFAULT_MODULE['default']='welcome';

SYSCONF::$DEFAULT_MODULE['admin']='blog';




SYSCONF::$SPACE_LIST = [
    'admin|cabinet'=>'admin',
    'main'=>'main'
];

SYSCONF::$MOD_ALIASES['main'] = [
    'cart|category|product'=>'shop'
];

SYSCONF::$MOD_ALIASES['admin'] = [
    'category|cart|orders'=>'catalog'
];
```

## Nginx Example config
```nginx
#project1.loc
server {
	listen 80;
	default_type text/html;
	server_name project1.loc;
	root /www/projects/project1/web;

    location ~* ^/pub/(.+\.(?:gif|jpe?g|png|js|css|woff|ttf|svg|eot|html|htm|txt))$
    {
         alias /www/kernel/PUB/$1;
         access_log off;
         expires 10d;
    }

	index index.php;

	location ~* ^.+\.(txt|jpe?g|gif|png|ico|css|txt|bmp|rtf|js|svg|eot|ttf|woff|html?)$
	{
         access_log off;
         add_header Cache-Control "public, max-age=31536000, immutable";
	}
	
	#все запросы направить на index.php
	location / {
		rewrite ^/(.*)$ /index.php;
	}

	location  ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass unix:/run/php/php7.3-fpm.sock;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	}


}
```


## ToDo
* add class **LE_SQLITE** - иногда нужно делать мини-приложения типа домашней бухгалтерии
* add class **LE_CALENDAR** - простейшие операции с датами, удобно для формирования всяких графиков платежей, например для кредитных калькуляторов
* add class **LE_FORMGEN** - генератор типовых формочек с заполнением полей данными из БД, удобно для быстрого клепания редакторов в админке
* add class **LE_XML**, **LE_CSV** - чтение и генерация форматов для экспорта/импорта
* внедрить сторонние библиотеки для работы с xls, xlsx (SimpleXLS, SimpleXLSX, PHPSpreadsheet, etc...)
* слепить простейший UIKIT, должен состоять как из CSS, так и из JS и бэкендные функции на PHP для генерации всяких модальных окон, нужно еще переопределить всякие алерты и конфирмы на свои, чтобы все вписывалось в интерфейс


> Весь процесс разработки логируется на [YouTube в виде видеоуроков](https://www.youtube.com/watch?v=hEfP0tYnmd4&list=PL0WBDVO8h9xcHuyw19JnOVjbxS-p6X3VF)



 ## [Документация](DOC) 

