martynbiz / slim3-module
一个用于在Slim 3项目中加载模块的简单类
dev-master
2016-06-09 14:09 UTC
Requires
- php: >=5.3.0
- slim/slim: ~3.0
Requires (Dev)
- phpunit/phpunit: 4.8.*
This package is not auto-updated.
Last update: 2024-09-23 13:13:27 UTC
README
介绍
Slim3模块
安装
Composer
"require-dev": { "martynbiz/slim3-module": "dev-master" }
入门
此库期望在模块目录内有一个目录,并在该模块中有一个{module_name}/Module类
modules/
├── Hello
│ └── Module.php
public/index.php
$moduleInitializer = new \MartynBiz\Slim3Module\Initializer($app, [ 'autoload' => [ // <--- list of modules to autoload 'Hello', ], 'modules_path' => '/path/to/modules', ]); $moduleInitializer->initModules();
composer.json
TODO 添加命名空间路径,例如 App/Module
/path/to/modules/Hello/Module.php
namespace Hello; use Slim\App; use MartynBiz\Slim3Module\AbstractModule; class Module extends AbstractModule { public function initRoutes(App $app) { $app->get('/hello/{name}', function ($request, $response) { $name = $request->getAttribute('name'); $response->getBody()->write("Hello, $name"); return $response; }); } }
高级用法
模块可以调用其他模块的库。为了允许这样做,模块初始化器将按以下顺序加载模块
- 为所有模块初始化类映射
- 从所有模块导入设置
- 为所有模块初始化依赖关系
- 为所有模块初始化应用程序中间件
- 最后,为所有模块初始化路由
要配置模块,简单地覆盖AbstractModule类的相关方法
namespace Hello; use Composer\Autoload\ClassLoader; use Slim\App; use Slim\Container; use MartynBiz\Slim3Module\AbstractModule; class Module extends AbstractModule { public function getModuleConfig() { return [ 'logger' => [ //... ], ]; } public function initClassLoader(ClassLoader $classLoader) { $classLoader->setPsr4("Hello\\", __DIR__ . "/src"); } public function initDependencies(Container $container) { $container['logger'] = function ($c) { $settings = $c->get('settings')['logger']; $logger = new \Monolog\Logger($settings['name']); $logger->pushProcessor(new \Monolog\Processor\UidProcessor()); $logger->pushHandler(new \Monolog\Handler\StreamHandler($settings['path'], \Monolog\Logger::DEBUG)); return $logger; }; //... } public function initMiddleware(App $app) { //... } public function initRoutes(App $app) { $app->get('/hello/{name}', function ($request, $response) { $name = $request->getAttribute('name'); $response->getBody()->write("Hello, $name"); return $response; }); } }