Builder Component
Описание

Компонент xtables\components\Builder предназначен для:

  • выполнения сборки приложения, то есть всех файлов, расположенных в указываемом в настройках каталоге и подкаталогах; если будет указан корневой каталог, то в сборку будут включены все файлы;
  • выполнения сборки по-файлово, то есть всех файлов, прямо указанных в настройках;
  • проведения сверки двух сборок: эталонной и тестируемой, на предмет состава файлов и соответствия их контрольных сумм, то есть их неизвеменности.

При проведении сборки компонент обходит файлы и обрабатывает файлы PHP, добавляя в их начало текст короткой лицензии и удаляя из кода переводы строк и комментарии (минифицирует).
Не подвергаются такой обработке файлы настроек (config.php, settings.php).

Файлы со слепками сборок сохраняются в каталоге /accessory/builds. Названия файлов соответствуют индивидуальным номерам сборок.

Использование

Для использования компонента нужно обладать высшими правами пользователя.
Использование осуществляется путем вызова системных роутов:

  • /xtables-builder/app - сборка всего приложения в пределах каталога, указанного в настройках;
  • /xtables-builder/files - сборка только файлов, указанных в настройках;
  • /xtables-builder/check-builds - проверка двух сборок: эталонной и тестируемой.
Настройки

Настройка осуществляется в файле /config/builder/settings.php.
Для настройки необходимо определить данные в ассоциативном массиве:

build_dir (string)

Каталог, в который нужно сохранить все файлы сборки.
Необходимо указать абсолютный путь до каталога.


'build_dir' => FileEngine::TMP . '/AppBuild'

'build_dir' => false // set false or don't set it for only make info file in /accessory/builds/
    

appname (string)

Название приложения, как оно будет указано в тексте короткой лицензии.


'appname' => 'xTables'
    

domain (string)

Домен, для которого создано приложение, как это будет указано в тексте короткой лицензии.


'domain' => 'some-domain.ru'
    

person (string)

Лицо, которому предоставлено приложение, как это будет указано в тексте короткой лицензии.


'person' => 'Some person'
    

skip_dirs (array)

Массив директорий, которые нужно пропустить и не включать в сборку.


'skip_dirs' => [
    '/SomeDir',
    '/ElseDir/Dir'
]
    

copy_dirs (array)

Массив директорий, PHP файлы в которых не нужно обрабатывать, а только скопировать.


'copy_dirs' => [
    '/SomeCopyDir',
    '/Else/Copy'
]
    

start_dirs (string)

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

  • web_root - здесь можно указать любой каталог внутри веб корня, например ROOT_PATH;
  • protected - здесь можно указать любой каталог внутри защищенной папки.

Каталоги со сборками будут распределены в две папки с названиями, соответствующими данным ключам.


'start_dirs' => [
    'web_root' => ROOT_PATH,
    'protected' => XTABLES_BASE . '/xtables'
]
    

file_names (array)

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


'file_names' => [
    'web_root' => [
        '/index.php' => ROOT_PATH
    ],
    'protected' => [
        '/xtables/xTables.php' => XTABLES_BASE,
        '/xtables/base/HeadConnector.php' => XTABLES_BASE
    ]
]
    

reference_build (string)

Путь к эталонному файлу сборки для сравнения с ним.


'reference_build' => '/accessory/builds/7f638699022f1058b69909bc807d882a7f9ea430.ini'
    

test_build (string)

Путь к тестируемому файлу сборки для сравнения с эталонным.


'test_build' => '/accessory/builds/601737fea185071921801e84e456d64de808e92f.ini'
    

Cache

Описание


Класс xtables\components\Cache используется для обеспечения работы кешей. Класс поддерживает разные типы хранения кеша. Новый провайдер кеша должен наследовать класс xtables\components\cache\EngineAbstract. Выбор типа провайдера кеша осуществляется в файле настроек /config/config.php.

  • Cache::FILE - базовый тип, использует для хранения кеша файлы сервера; используется по умолчанию, если тип не определен;
  • Cache::MEMCACHE - используется хранилище memcached; кеш хранится в оперативной памяти;
    для работы необходимо установка расширения PHP memcache (без d);
  • Cache::REDIS - используется no-sql сервер Redis;
    для работы данного типа кеша необходим установленный сервер Redis и PHP клиент для него https://packagist.org/packages/predis/predis#dev-master
    установка осуществляется через composer
  • Cache::DB - используется база данных из пула подключений

Использование


Для использования кеша нужно использовать статическими интерфейсами:

  • exists(string $key): bool проверка наличия данного ключа в кеше; возвращает true при обнаружении;
  • get(string $key) получение значения из кеша по ключу
  • set(string $key, $value, int $ttl = 0): bool сохранение значения в кеше
    • string key - обозначение ключа для сохранения в кеш;
    • mixed value - значение для сохранения, может быть любым сериализуемым значеним (string, array, int, boolean, object), возвращается как было передано в соответствии с требованиями PSR-6;
    • int ttl - время жизни кеша в секундах, если параметр не передается, то время жизни не ограничивается.
  • appendToTag(string $tag, string $key): bool - создание коллекций записей кеша;
  • delete(string $key): bool - удаление одной записи из кеша;
  • clear(array|string $keys): bool - удаление одной или нескольких записей из кеша.

use xtables\components\Cache\model\Cache;

if (Cache::exists('some')) {
    return Cache::get('some');
}

Cache::set('some', 'value');
Cache::set('some', 'value', 60);

Cache::proxy()->set('key', 'value', 60);

Cache::delete('some');
Cache::clear([
    'one',
    'two',
    'three'
]);

PSR-6

Начиная с версии cv1.3.12, приложение содержит PSR-6 совместимые классы для работы с кешем:

  • CacheItemPool
  • CacheItem

Взаимодействие с данными классами осуществляется по правилам, определенным интерфейсами PSR-6.

Для получения экземпляра класса CacheItemPool с драйвером кеша, соответствующим вышеуказанной настройке в файле config.php для обычного кеша (other), можно использовать статический интерфейс Cache::itemPool()

Если требуется использование специфичного драйвера, то необходимо создать экземляр класса CacheItemPool, в конструктор которого передать драйвер кеша, реализующий интерфейс xtables\components\cache\interfaces\EngineInterface.


$pool = Cache::itemPool();
//$engine = new FileEngine(); // or other implements EngineInterface
//$pool = new CacheItemPool($engine);

$item = $pool->getItem('some_cache_key');
if ($item->isHit()) {
    return $item->get();
}
$item->expiresAfter(3000)->set('some value: string, array, object, int');
$pool->save($item);

Настройка


Для неиспользования кеша при построении системными компонентами cardView и tableView используется настройка 'no_cache' => true (см. описание данных компонентов).
В главном конфигурационном файле /config/config.php определяются глобальные типы используемых хранилищ кешей для 'sql_output' и 'other'.
Если нужно использовать значения для подключения сервера по умолчанию, то параметр server для memcache и redis можно не определять. Будет подключаться локальный хост с портом по умолчанию.


'cache' => [
    'type' => Cache::FILE //Cache::MEMCACHE, Cache::REDIS
    /*
     * OR
     * 
    'type' => Cache::MEMCACHE,
    'server' => [
        [
            'host' => '127.0.0.1',
            'port' => 11211,
            'weight' => 100
        ],
        *
        * OR
        *
        [
            'host' => '127.0.0.1',
            'port' => 11211,
            'weight' => 30
        ],
        [
            'host' => '127.0.0.1',
            'port' => 11211,
            'weight' => 70
        ]
    ]
     * 
     * OR
     * 
    'type' => Cache::REDIS,
    'server' => [
        'params' => [

        ],
        'options' => [

        ]
    ]
     * 
     */
]

Comment

Описание


Данный компонент может использоваться для стандартизированного вывода комментариев к определенной карточке (записи) в таблице.

Использование


Возможно использование компонента двумя путями:

  • упрощенный
    Вызвать статический метод getForm() класса xtables\components\comment\Comment.
    В качестве параметров в метод нужно передать:
    • for_table - обязательно название sql таблицы, для которой были созданы комментарии;
    • for_id - обязательно номер идентификатора, для которого созданы комментарии;
    • table - необязательно название sql таблицы, в которой сохранены комментарии, по умолчанию используется comment.

    
    use xtables\components\comment\Comment;
    
    Comment::getForm('catalog', $id); // will be used default table comment to search in and update
    Comment::getForm('catalog', $id, 'some_else_comment_table');
                
  • расширенный
    Создать экземпляр класса xtables\components\comment\Comment, вызвать метод get().
    В конструктор класса передать параметры:
    • dbc - необязательно название подключения к БД из пула подключений в файле config.php, если не указано, то использует первое по списку подключение;
    • for_table - название sql таблицы, для которой были созданы комментарии;
    • for_id - номер идентификатора, для которого созданы комментарии;
    • table - необязательно название sql таблицы, в которой сохранены комментарии, по умолчанию используется comment.
    • form_sample - необязательно расположение файла представления для специфической формы комментариев с указанием пути до базового каталога, соответствующего константе XTABLES_BASE;
    • row_sample - необязательно расположение файла представления для специфического комментария с указанием пути до базового каталога, соответствующего константе XTABLES_BASE;
    • nocomment_sample - необязательно расположение файла представления для специфического ответа об отсутствии комментариев с указанием пути до базового каталога, соответствующего константе XTABLES_BASE.

    
    use xtables\components\comment\Comment;
    
    $comment = new Comment([
        'for_table' => 'some_table_for',
        'for_id' => $id,
        'table' => 'some_comment_table',
        'form_sample' => '/config/comment/comment-form-specific.php',
        'row_sample' => '/config/comment/comment-row-specific.php',
        'nocomment_sample' => '/config/comment/nocomment-reply-specific.html'
    ]);
    $comment->get();
                

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

Каждая форма для комментариев получает вероятностный уникальный css идентификатор,
поэтому на одну страницу можно вставить несколько таких форм с разными параметрами.

Настройки


Настройка внешнего вида данного компонента может быть осуществлена путем редактирования файлов представлений в папке /config/comment:

  • comment-form.php - форма для показа и ввода комментариев;
  • comment-row.php - вид одного комментария;
  • nocomment-reply.php - ответ об отсутствии комментариев.

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

Db
Описание

Класс xtables\base\Db использует класс PDO для работы с базами данных и обеспечивает создание пула подключений к ним.
Каждое подключение автоматически, исходя из настроек подключения, получает специальный класс конкретной СУБД (в настоящее время имеются классы MysqlEngine, PgsqlEngine, SqlsrvEngine, SqliteEngine, DefaultEngine), который вносит изменения в запросы, исходя из специфики типа базы данных, в том числе учитывая логику xTables.

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

Также в рамках подключения имеется возможность создания класса создателя запросов QueryBuilder, используя метод builder() (since cv1.7.13, @deprecated getBuilder()). Имеется возможность создать пул билдеров, передавая идентификатор в данный метод, что обеспечивает возможность одновременного строительства множества запросов в циклах.

Использование

Для подключения к базе данных нужно воспользоваться статическим интерфейсом getConnect(), указав в параметре имя требуемого подключения как оно определено в настройках в файле /config/config.php. Данный метод при необходимости создаст singleton класса xtables\base\Db и возвратит его инстанс. Для каждого подключения будет создаваться свой singleton. Если имя будет не указано, то будет осуществлено подключение к первому подключению, указанному в настройках.

Можно добавлять подключения к базе данных в разных местах, не боясь повторных подключений, так как в данном классе используется singleton.


use xtables\base\Db;

$connection = Db::getConnect(); // Db::getConnect('main'); or other db connection name

//$connection = Db::proxy()->getConnect();

$result = $connection->prepare($query);
$result->execute($query);
    

QueryBuilder

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

Построитель запросов удобен, когда необходимо собирать параметры для запроса (например, условия WHERE) в разных классах.

Имеется возможность использования методов построителя запросов:

  • select(array|string $select): QueryBuilder - в метод нужно передать простой массив наименований колонок либо строку с колонкой; метод может вызываться много раз в разных классах для полного формирования списка выбираемых колонок;
  • insert(string $table): QueryBuilder - в метод нужно передать наименование sql таблицы, в которой будет выполняться вставка данных;
  • update(string $table): QueryBuilder - в метод нужно передать наименование sql таблицы, в которой будет выполняться обновление данных;
  • delete(string $table): QueryBuilder - в метод нужно передать наименование sql таблицы, в которой будет выполняться удаление данных;
  • set(array $set): QueryBuilder - в метод нужно передать массив, в котором ключами будут наименования колонок, а значениями - данные для вставки (будут заменены псевдопеременными и помещены в подготавливаемый запрос);
  • values(array $values): QueryBuilder - в метод нужно передать массив, в котором ключами будут наименования колонок, а значениями - данные для вставки (будут заменены псевдопеременными и помещены в подготавливаемый запрос);
  • where(array|string $where): QueryBuilder - в метод нужно передать массив, в котором ключами будут наименования колонок со знаком сравнения, а значениями - данные для вставки (будут заменены псевдопеременными и помещены в подготавливаемый запрос); также можно передать не массив, а строку, тогда она будет вставлена в условие без дополнительной обработки;
  • orderBy(string $orderBy): QueryBuilder - строка с наименованием колонки для сортировки; метод может вызываться несколько раз для добавления колонок сортировки;
  • from(string $table, string $tableAdd = '') - в метод нужно передать два строковых параметра: название sql таблицы и sql выражение для объедения с другими таблицами JOIN;
  • limit(int $limit = 0): QueryBuilder - если нужно ограничение числа показываемых записей, то можно использовать данный метод, передав в него числовое значение.

Исполнение построенного запроса осуществляется:

  • all(int|string $iBuilder = 0): \PDOStatement - если построителей запросов несколько, то в метод нужно передать идентификатор построителя запроса. Данный метод возвращает result pdo statement;
  • exec(int|string $iBuilder = 0): \PDOStatement - алиас для метода all
  • execGetid(int|string $iBuilder = 0): int - исполняется запрос и возвращается идентификатор вставленной записи.

use xtables\components\db\Db;

$connection = Db::getConnection();
$connection->builder()
           ->select(['table_t.col1', 'table_t.col2', 'table_t.col2', 'table_t.col3'])
           ->from('table_t')
           ->where(['table_t.col1 = ' => 'some_external_unsafe_value'])->limit(10);
$connection->all();

use xtables\components\db\Db;

$connection = Db::getConnection();
$builder1 = $connection->builder(1);
$builder2 = $connection->builder(2);
$builder3 = $connection->builder(3);

$builder1->update('table_t')->set(['col1' => 'some'])->where(['id = ' => 1]);
$builder2->update('table_t')->set(['col1' => 'some'])->where(['id = ' => 2]);
$builder3->update('table_t')->set(['col1' => 'some'])->where(['id = ' => 3]);

$connection->all(1);
$connection->all(2);
$connection->all(3);

Schema

Для создания sql таблиц в базе данных можно использовать класс xtables\components\db\Schema.

В конструктор класса нужно передать параметры:

  • dbc - название подключения к БД, где будут создаваться таблицы; если не указано, то будет по умолчанию использоваться первое подключение в пуле;
  • массив параметров для создания таблиц.

При описании таблиц нужно использовать нижеуказанные типовые наименования, которые будут откорректированы автоматически в зависимости от типа СУБД, в которой будут создаваться таблицы.

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

columns

Массив параметров columns в качестве ключей должен содержать имена колонок, а в качестве значений параметры:

  • string type - тип колонки с одним из значений:
    • varchar - поле VARCHAR с определенной длиной, при длине более 8000 она будет обрезана до 8000 для унификации с SQL SERVER;
    • char - фиксированный тип CHAR;
    • text - в зависимости от типа СУБД (MySQL - text, PostgreSQL - VARCHAR, SQL SERVER - VARCHAR(8000));
    • int - разные типы числовых полей, которые поддерживаются конкретным типом СУБД, который выбирается автоматически в зависимости от выбираемой длины, например: SMALLINT, INT ...;
    • boolean - поле для сохранения значений 0 и 1 (ложь, истина);
    • date - тип дата;
    • datetime - дата и время;
    • decimal - поле для чисел с десятичной дробью, по умолчанию равняется 10, 2; в качестве параметра нужно передать строку с длиной '10,2' ('5,1' ...).
  • int len - длина поля, применяется не ко всем типам;
  • boolean unique - если нужно создание уникального индекса по этому полю.

indexes

Массив параметров indexes с массивами в качестве параметров (параметры для каждого индекса должны быть обернуты в массив, имена индексов подставляются автоматически):

  • array columns - одна или несколько колонок для создания по ним индекса;
  • boolean unique - для создания уникального индекса добавить данный параметр со значением 'unique' => true.

'table_name' => [
    'columns' => [
        'column_name' => [
            'type' => 'varchar',
            'len' => 20,
            'unique' => true
        ],
        'column_name_else' => [
            'type' => 'int',
            'len' => 5
        ]
    ],
    'indexes' => [
        [
            'columns' => [
                'column3',
                'column5'
            ]
        ],
        [
            'columns' => [ // one or more columns for composite index
                'column1'
            ],
            'unique' => true
        ]
    ]
]


use xtables\components\db\Schema;

$tables = include 'db-structure.php'; // or array with params
//$tables['dbc'] = 'some_db_connection_name'; // if need

$schema = new Schema($tables);
$schema->run();

$warnings = $schema->getWarnings();
$success = $schema->getSuccess();
Настройки

Для настройки подключения к базам данных нужно создать массив 'db' с настройками в конфигурационном файле /config/config.php, в качестве ключа массивом можно использовать свободные обозначения подключений:

  • 'dsn' - соответствующие настройке PDO указание на драйвер подключения с данными о БД;
  • 'user' - имя пользователя базы данных;
  • 'pass' - пароль пользователя базы данных.
  • 'options' - специфические для соответствующего драйвера PDO опции; по умолчанию, если не определено, то пустой массив.

Например:


'db' => [ // pool of data base connections
    'main' => [ // free name for current connection
        'dsn' => 'mysql:dbname=some_dbname;host=localhost;charset=UTF8',
        'user' => 'user_name',
        'pass' => 'some_password',
        /**
         * by default if not set is empty array
         * may be set specific options for current db pdo driver
         */
        //'options' => []
    ],
    'else_dbc' => [ // free name for current connection
        'dsn' => 'pgsql:dbname=some_dbname_else;host=localhost',
        'user' => 'user_name_else',
        'pass' => 'some_password_else'
    ],
    'some_mssql' => [
        'dsn' => 'sqlsrv:server=(local)\sqlexpress;database=some_db_name',
        'user' => '', // windows authentication, empty values
        'pass' => ''
    ]
]
    

Infobox Component

Описание


Компонент xtables\components\Infobox предназначен для отображения информационных сообщений, которые завершают выполнение скрипта. Они показываются в модальном окне.
Внешний вид сообщения об отсутствующей странице может быть откорректирован в файле 404.php в каталоге /config/InfoBoxes.

Использование


Для использования информационных сообщений необходимо вызвать статический интерфейс Info::throwBox($params).
В метод должна быть передана строка с текстом сообщения либо массив с параметрами.


Info::throwBox('some text');
Info::throwBox(2);
Info::throwBox([
    'content' => 'some',
    'debug' => 'some for debug'
]);

Информационное сообщение также может быть вызвано по ссылке URL /xtables-info/show/.

Массив параметров может состоять из:

content (string)

Здесь может быть указан один из вариантов:

  • текст с информационным сообщением;
  • номер предустановленного сообщения;
    Предустановленные сообщения:
    • 1 - Вся почта отправлена успешно;
    • 2 - Данные сохранены успешно;
    • 3 - Ваша сессия истекла. Пожалуйста, авторизуйтесь;
    • 4 - У Вас нет прав для просмотра данной страницы;
    • 5 - Пароль или логин не верны;
    • 6 - Произошла ошибка. Попробуйте еще раз;
    • 7 - Произошла ошибка при шифровании. Попробуйте еще раз;
    • 8 - Приложение может работать неправильно с этим браузером, попробуйте другой браузер;
    • 9 - Почта не отправлена. Попробуйте еще раз;
    • 10 - Приложение не будет работать при выключенном JavaScript. Пожалуйста, включите его в браузере;
    • 11 - Произошла ошибка. Пройдите авторизацию снова;
    • 12 - Пользователь удален успешно;
    • 13 - Минимальная длина поискового запроса - 3 символа
    • 17 - Карточка удалена успешно;
    • 18 - В связи со сбросом служебных ключей или по другим причинам Ваш аккаунт нуждается в перегенерации данных авторизации. Обратитесь к администратору;
    • 19 - Произошла ошибка загрузки ajax содержимого. Перезагрузите страницу;
    • 20 - Файл-документ подписан ЭП;
    • 403 - Доступ запрещен;
    • 404 - Страница не найдена (имеет специальный дизайн, который может быть отредактирован в файле /config/infoBoxex/404.php).

title (string)

Заголовок сообщения; может быть использован ключ мультиязычности.

js (string)

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

ajax (string)

Данный параметр имеет больший приоритет по сравнению с параметров js. URL, по которому должен быть сделан ajax запрос при нажатии на кнопку OK, закрытия информационного окна; ответ на запрос по такому url можно отформатировать с помощью метода xtables\base\AjaxDispatcher::getReply; он должен содержать в качестве ключа имя css селектора(ов) для вставки данных

debug (string | array | callable | Exception)

Расширенная информация, которая выводится при включенном режиме debug. Может использоваться один из типов:

  • instanceof \Exception - объект исключения (в этом случае в отладочной информации будет показан исходный код файла, где было выброшено исключение);
  • строка сообщения или обозначение ключа для использования мультиязычного сообщения;
  • массив со строковыми значениями сообщений или обозначений ключа (ключей) мультиязычных сообщений;
  • callable функция, которая вернет расширенную информацию.

debug_params (array)

В случае, если в качестве debug будет использоваться callable функция, то в данном параметре можно передать массив параметров, которые могут быть обработаны в пользовательской функции.

size (string)

Размер окна сообщения; по умолчанию - средний размер, возможен маленький размер (значения small, little, sm), большой размер (значения lg, big, large).

btn_close (boolean)

По умолчанию, кнопка-крестик для закрытия модального информационного окна не показывается, если нужно показать ее то нужно включить данный параметр со значением true.

btn_ok (boolean)

По умолчанию, в информационном окне используется кнопка OK, которая служит для его закрытия; если не нужно показывать данную кнопку, то нужно определить данный параметр со значением false.

inlayout (boolean)

По умолчанию, информационное окно загружается как независимая страница (с head частью со скриптами js, css); если необходимо, чтобы html код с модальным окном добавлялся к странице, то нужно определить данный параметр со значением false

same_page (boolean)

Для показа информационного сообщения поверх имеющейся страницы.

background (string | int)

По умолчанию, фон окна сообщения - белый, для изменения цвета можно использовать:

  • значения warning, err, success
  • один из уровней логов, соответствующих константам xtables\base\Log:
    Log::ALERT, Log::ERROR ...
  • название цвета по правилам CSS
Мультиязычные сообщения:
Для изменения текстов сообщений, добавления сообщений необходимо отредактировать json массив в соответствующем языковом файле в каталоге /config/InfoBox/lang.
Для добавления языка нужно создать в этом каталоге файл с названием, соответствующим короткому названию соответствующего языка.
В параметрах title, content, debug можно использовать обозначения ключей мультиязычности, соответствующих содержащимся в указанном соответствующем языковом файле, в этом случае текст сообщений будет меняться в зависимости от выбранного языка.

use xtables\components\InfoBox\Info;

try {
    $this->result = Db::$db[$this->dbc]->prepare($query);
    $this->result->execute();
} catch (\PDOException $ex) {
    Info::throwBox([
        'content' => 'Ошибка при выборке данных',
        'debug' => $ex,
        'inlayout' => false,
        'ajax' => '/some/url',
        'size' => 'lg'
    ]);
}

Настройки


Дополнительные настройки не предусмотрены.

Requirements Component
Описание

Компонент xtables\components\Requirements предназначен для:

Обновления ядра и расширений

Производит по запросу проверку обновлений, связываясь с xtables.ru. Получает патч с изменениями (если есть), который может быть установен вручную или автоматически.

Изготовление слепка ядра

Изготовления файла-слепка необходимых для работы ядра xTables файлов для проверки целостности их состава в будущем.
В состав этого слепка входят файлы из каталогов:

  • /xtables - каталог с файлами ядра xTables;
  • /config - каталог с файлами настроек xTables;
  • /ext - каталог с файлами типовых расширений xTables;
  • /css - каталог с файлами стилей, где находятся необходимые для работы стили Bootstrap, style.css, font-awesome, offcanvas;
  • /js - каталог с файлами JS, где находятся необходимые для работы xtables.js, user.js, jquery, jsencrypt и др.
  • /fonts - каталог с файлами, необходимыми для отображения шрифтовых иконок.

Желательно, чтобы в момент изготовления слепка файлов, необходимых для ядра xTables, в данных папках отсутствовали лишние файлы. Либо можно удалить их потом вручную из файла-слепка /xtables/config/Settings/file-list.ini для обеспечения чистоты проверок.

Изготовления слепка проекта

Изготовления файла-слепка необходимых для работы проекта файлов для проверки целостности их состава в будущем. Перечень каталогов, которые входят в состав проекта нужно определить в виде массива в файле /config/requirements/app-folders.php.

Проверка приложения

Проверки приложения на соответствие минимальным требованиям, в том числе на предмет целостности состава файлов проекта и файлов, необходимых для работы ядра.

В ходе данной операции проверяется:

  • Наличие минимально необходимых расширений PHP, включая CURL, OPENSSL и других.
  • Проверяется версия xTables и выводится информация о самой свежей версии с домена xtables.ru.
  • Проверяется целостность состава файлов, необходимых для работы ядра. Выводится информация о файлах, которые не обнаружены, но входят в слепок.
  • Проверяется целостность состава файлов проекта. Выводится информация о файлах, которые не обнаружены, но входят в слепок.
  • Проверяется наличие блокирующего файла .htaccess с директивой deny from all во всех каталогах ядра и проекта, за исключением свободных каталогов /js, /css, /images. Если файл не обнаружен, то он добавляется в соответствующий каталог.
  • Проверяется наличие необходимых для работы xTables каталогов для хранения кэша '/accessory/cache/sql', '/accessory/cache/output', '/accessory/cache/other'. При необходимости они создаются.
Использование

Для использования компонента необходимо:

  • создать первого пользователя, поскольку доступ к изготовлению файлов-слепков и проверке дается пользователю с высшими правами, которыми обладает первый пользователь;
  • должен быть включен модуль apache mod_rewrite и осуществлена его настройка в файле /.htaccess в веб корне приложения, что необходимо для работы роутов.

После этого могут быть вызваны системные роуты:

  • /xtables-requirements - включение проверки с выводом на экран браузера информации о ее результатах, здесь становится доступна кнопка для проверки обновлений ядра и расширений;
  • /xtables-requirements/ext - показ всех доступных расширений с информацией о том, что расширение установлено, требуется обновление системы для его установки или установка возможна (кнопка Установить);
  • /xtables-requirements/xtables-file-list - создание слепка файлов, необходимых для работы ядра;
  • /xtables-requirements/app-file-list - создание слепка файлов, необходимых для работы проекта.
Настройки

Перечень каталогов, которые входят в состав проекта нужно определить в виде массива в файле /config/appRequirements/app-folders.php.
Массив нужно разбить на два подмассива:
- dirs - каталоги, будут включены все файлы из этих каталогов;
- files - отдельные файлы.
В качестве ключей нужно указывать относительные пути, а в качестве значений абсолютные пути-префикты с данным папкам(файлам).

Файл-слепок файлов проекта будет сохранен в файле /config/appRequirements/file-list.ini.


'dirs' => [
    '/app' => XTABLES_BASE,
    '/images' => ROOT_PATH
],
'files' => [
    //'/relative/path/file.txt' => ROOT_PATH
]
SettingsEdit Component
Описание

Данный компонент состоит из двух основных частей:

  • первичная настройка;
  • отдельные настройки в процессе работы.

Первичная настройка

Первичная настройка является одним из первых действий при установке xTables после переноса файлов на сервер и настройки доступа к СУБД.

Создается первый пользователь, которому присваиваются высшие права, согласно настройкам в файле /config/xtables-classes-access.php, необходимые для создания других пользователей.

В базе данных создаются (если не существуют) минимально необходимые sql таблицы.

Создаются каталоги

  • /accessory/cache

Отдельные настройки в процессе работы

  • Настройка данных для отправки почты по SMTP.
  • Настройка Яндекс.Диска.
  • Настройка СМС сервиса.
  • Сброс сервисных ключей и создание первого пользователя.
Использование

Для использования компонента нужно вызвать соответствующий системный роут.

  • /xtables-primary - первичная настройка приложения;
  • /xtables-settings/mail - настройка данных для отправки почты по SMTP;
  • /xtables-settings/yadi - настройка Яндекс.Диска;
  • /xtables-settings/mainsms - настройка СМС сервиса;
  • /xtables-primary/reset - сброс сервисных ключей и создание первого пользователя.
Настройки

Имеется возможность создать начальную схему базы данных - структуру таблиц для проекта.
Для этого необходимо указать нужные таблицы в массиве в файле /config/requirements/db-structure.php.
Если таблица уже существует она не будет изменяться или удаляться, поэтому данный компонент можно повторно использовать для добавления новых таблиц проекта.

При описании таблиц нужно использовать типовые наименования, которые будут откорректированы автоматически в зависимости от типа СУБД, в которой будут создаваться таблицы. См. описание Schema