lastzero / di-microkernel
PHP应用程序的微内核
Requires
- php: >=7.1
- psr/container: *
- symfony/dependency-injection: ^4.0
- symfony/yaml: ^4.0
Requires (Dev)
- lastzero/test-tools: ^4.2
README
此库包含一个用于引导几乎任何PHP应用程序的微内核,包括 Silex,Symlex(基于Symfony的敏捷Web开发框架栈)和 Symfony Console。内核本身只有几行代码,用于设置一些环境参数并创建一个服务容器实例。
运行应用程序
创建一个内核实例并调用 run()
即可启动应用程序
#!/usr/bin/env php <?php // Composer require_once 'vendor/autoload.php'; $app = new \DIMicroKernel\Kernel('console'); // Run the 'app' service defined in config/console.yml $app->run();
配置
位于 config/
目录中的YAML文件配置应用程序及其所有依赖项作为服务。文件名与应用程序的环境名称匹配(例如 config/console.yml
)。配置还可以通过提供匹配的配置文件(例如 config/console.local.yml
)来修改子环境,如本地或生产环境(参见 app.sub_environment
参数)。这些文件与您可能从Symfony中了解到的格式相同,已得到良好记录。
parameters: app.name: 'My App' app.version: '1.0' services: doctrine.migrations.migrate: class: Doctrine\DBAL\Migrations\Tools\Console\Command\MigrateCommand app: class: Symfony\Component\Console\Application public: true arguments: [%app.name%, %app.version%] calls: - [ add, [ "@doctrine.migrations.migrate" ] ]
这提供了一种统一的方法来使用相同的内核引导Web应用程序,如 Silex\Application
,Symlex\Application\Web
或命令行应用程序,如 Symfony\Component\Console\Application
。其结果比许多框架中常见的引导和配置混乱要干净得多。
参数
内核设置了一些默认参数,可用于配置服务。默认值可以通过内核的setter方法更改,也可以通过容器配置文件和环境变量(例如 url: '%env(DATABASE_URL)%'
)覆盖或扩展。
自定义
可以通过扩展内核基类来自定义它以适应特定目的,例如长期运行的命令行应用程序。
<?php use DIMicroKernel\Kernel; class ConsoleApp extends Kernel { public function __construct($appPath, $debug = false) { parent::__construct('console', $appPath, $debug); } public function setUp() { set_time_limit(0); ini_set('memory_limit', '-1'); } }
缓存
如果关闭了调试模式,内核将在设置为缓存路径的目录中缓存服务容器配置。在更新配置后,您必须删除所有缓存文件。要完全禁用缓存,请将 container.cache: false
添加到您的配置参数中。
parameters: container.cache: false
Composer
要在此项目中使用此库,只需运行 composer require symlex/di-microkernel
或将 "symlex/di-microkernel" 添加到您的 composer.json 文件中,然后运行 composer update
。
{ "require": { "php": ">=7.1", "symlex/di-microkernel": "^2.0" } }
关于
DIMicroKernel 由 Michael Mayer 维护。如果您有任何问题,需要 商业支持 或只是想打个招呼,请随时发送电子邮件至 hello@symlex.org。我们欢迎任何形式的贡献。如果您有错误或想法,在提交问题之前请先阅读我们的 指南。