Translate

PHP Микрофреймворк HLEB

Скачать Скачать с GitHub
Предназначение Установить Настройка Структура проекта Маршрутизация Типы маршрутов Группы маршрутов Защита маршрутов Конструктор страниц Контроллеры Модели Получение данных Базы данных Регистрация DI Дополнительно

DI

Draft Instances

Генератор классов по образцам ("черновикам")

Данный способ не похож на классический DI (Dependency injection), так как внедряет зависимости не программно при выполнении, а предварительно, генерируя и изменяя классы согласно настройкам. Созданные классы существуют в виде файлов, можно проверить их правильность, зависимости "видимы" для IDE и есть возможность для тестирования.

Draft Instances - экспериментальная методика, как и некоторое другое во фреймворке HLEB, к которому эта библиотека относится. Не подходит для бездумного использования. При желании можно подключить библиотеку отдельно (генерация реализована в классе GeneratingTask).

Установка

$ composer require phphleb/draft

Развертывание

$ php console phphleb/draft --add

Генерация

Генерация классов и обновление автозагрузчика. Каждый раз при изменении настроек или классов-образцов нужно запускать эту команду.
$ php console drafts/generating-task --update-all
$ composer dump-autoload

Единственное отличие сгенерированных классов от обычных, созданных разработчиком - редактируются они только из "черновика" и настроек. При помощи настроек из одного образца("черновика") можно создать множество похожих классов для разных задач. Каждый "черновик" произволен по содержанию, принцип подстановки настроек в него прост, он задается следующим образом.

1) Массив с настройками:
return [ 'AClass' => [ 'TestDraftClass' => [ 'ActionName' => 'new \DateTime', 'Value' => '\'now\'', 'ReturnType' => '\DateTimeInterface', 'Description' => 'Demo A class' ] ], 'BClass' => [ 'TestDraftClass' => [ 'ActionName' => 'implode', 'Value' => '[100,500]', 'ReturnType' => 'string', 'Description' => 'Demo B class' ] ], ];
2) Схематический класс-основа TestDraftClass.php (значения по умолчанию для подстановок нейтрально-произвольные, чтобы работала подсветка синтаксиса в IDE):
<?php /* *//**<-@Description*/ class TestDraftClass/**<-@ClassName*/ { private const VALUE = null/**<-@Value*/; public function get(): void/**<-@ReturnType*/ { return /**<-@ActionName*/(self::VALUE); } }
3) После запуска генерации получится два рабочих класса:
<?php /* Demo A class */ class AClass { private const VALUE = 'now'; public function get(): \DateTimeInterface { return new \DateTime(self::VALUE); } }
<?php /* Demo B class */ class BClass { private const VALUE = [100,500]; public function get(): string { return implode(self::VALUE); } }
Подстановка произведена по маркерам /**<-@...*/, потом бралось значение слева от маркера, до пробела, и все это заменялось на подходящее значение из конфигурации класса. Для создания собственных классов-"черновиков" и их настроек нужно учитывать это единственное правило.

По умолчанию в данной библиотеке создано несколько примеров (файл services.php и папка c "черновиками" DraftInstances), которые показывают возможности генерации.

Обновление библиотеки

$ composer update phphleb/draft
$ php console phphleb/draft --add
$ php console drafts/generating-task --update-all
$ composer dump-autoload


Библиотека Draft Instances на GITHUB: github.com/phphleb/draft




Предназначение Установить Настройка Структура проекта Маршрутизация Типы маршрутов Группы маршрутов Защита маршрутов Конструктор страниц Контроллеры Модели Получение данных Базы данных Регистрация DI Дополнительно



Группа поддержки в Телеграм - @phphleb

Этот сайт-инструкция к фреймворку HLEB сделан с использованием фреймворка HLEB.

HLEB - PHP Микрофреймворк Свободная лицензия. Без гарантий. © fomiash 2019-2021