dariorieke / lightframework
现代、简单的php框架
Requires
- dariorieke/callable-resolver: dev-master
- dariorieke/dependency-injection: dev-master
- dariorieke/event-dispatcher: dev-master
- dariorieke/kernel: dev-master
- dariorieke/router: dev-master
- nyholm/psr7: ^1.0@dev
- nyholm/psr7-server: dev-master
- psr/http-message: 1.0
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-09-22 17:37:04 UTC
README
一个与PSR-7请求和响应一起工作的php框架。
它是如何工作的?
简而言之,该框架接收一个请求,确定并调用适当的控制器,然后将结果作为响应返回。
入门指南
安装
使用composer将LightFramework安装到项目目录中
composer create-project dariorieke/lightframework --stability=dev
如果您的安装在一个子文件夹中,您需要编辑 .htacces 文件
文件结构
安装后,您应该在项目中看到以下结构
📦your-project
┣ 📂.git
┣ 📂config
┣ 📂public
┃ ┕📜index.php
┣ 📂src
┣ 📂tests
┣ 📂vendor
┣ 📜.gitignore
┣ 📜.htaccess
┣ 📜composer.json
┗ 📜composer.lock
config/
目录包含框架和应用程序服务和配置。
public/index.php
是应用程序的主要入口点。所有请求都应该重定向到此文件。默认情况下,通过 .htaccess
文件执行此操作。可以使用 public/
目录直接交付文件,如资产,因为它可以从浏览器访问。
src/
包含框架文件。
tests/
是放置应用程序测试的地方,src/
中已经有了一些组件的测试。
vendor/
文件夹包含项目中在 composer.json
/ composer.lock
中定义的所有composer依赖项。
.git/
和 .gitignore
存在,以防您想使用git管理项目。
您可能需要考虑将应用程序类和文件放在哪里。这取决于您。但LightFramework建议在应用程序的根目录中创建一个 app/
文件夹,并在 composer.json
文件中添加对其的自动加载,如下所示
"autoload": {
"psr-4": {
"DarioRieke\\LightFramework\\": "src/",
"MyGreatApplication\\": "app/"
}
}
配置
要配置应用程序,您可以使用基于环境的 .ini 文件。
打开 config/config.ini
文件。这是主要配置文件。它将在每个环境中加载。当您定义自定义配置选项时,您可以通过容器在应用程序中访问它
$container->getParameter('APP_DEBUG');
或通过 $_SERVER
超全局变量
$_SERVER['APP_DEBUG'];
config/config.ini
文件默认包含 2 个参数
APP_ENV = dev
APP_DEBUG = true
APP_ENV 是应用程序运行的环境。应用程序将根据环境加载其配置。如果您将环境设置为例如 'production'
,则框架将尝试加载 config/production/config.ini
文件,其中配置值将覆盖之前加载的值。这样,您可以在不同的环境中轻松使用不同的配置。
APP_DEBUG 控制您的应用程序是否处于调试模式。
服务配置
打开 config/services.php
文件以查看所有默认服务。
在应用程序中注册新服务就像这样
$container->singleton(MyCustomService::class, function ($container) {
return new MyCustomService();
});
如您所见,注册函数将容器实例作为参数,因此我们可以轻松地引用其他服务和配置值
$container->singleton(MyCustomService::class, function ($container) {
return new MyCustomService(
$container->getParameter('APP_DEBUG'),
$container->get(MyOtherDependency::class)
);
});
与 config/config.ini
文件一样,services.php
文件将根据环境加载。这允许您根据环境覆盖和添加服务。默认情况下,在测试应用程序时,将加载 config/test/services.php
文件。
(注意:基于环境的服务文件必须返回一个接受容器作为参数的可调用对象,请参阅 config/test/services.php
)
在控制器中使用服务很简单。只需键入类型提示依赖项,LightFramework 将为您注入它。要使用控制器中之前定义的服务
function myController(MyCustomService $service) {
// ...
}
您甚至可以在控制器中使用配置参数,只需使用您想要使用的参数名称即可。
function myController(bool $APP_DEBUG) {
// ...
}
提示:如果您想将类作为控制器使用并想使用构造函数参数,请将其注册为服务,CallableResolver将在加载控制器时从容器中获取它。
有关更多信息,请参阅容器的文档。
路由配置
打开config/routes.php
文件。这是您控制应用程序路由的地方。要添加路由,请使用
$routes->add(
new Route(
'/',
function() {
return 'Hello World';
}
)
);
当然,您也可以为路由使用命名参数。框架将它们作为参数注入到您的控制器中。
$routes->add(
new Route(
//route with 2 named parameters
'/{task}/{id}',
//the controller to call
function($task, $id) {
return 'Todo:' . $task, $id;
}
)
);
甚至路由文件也将根据环境加载,就像服务和.ini配置一样。
(注意:基于环境的路由文件必须返回一个可调用项,该可调用项接收一个路由集合以修改作为参数)
有关更多信息,请参阅路由器的文档。
编写测试
LightFramework为您提供了一个php单元测试用例(src/LightFrameworkTestCase.php
),您可以扩展它来设置测试环境中的内核。详细信息即将提供。
完整示例
即将提供...
容器参数/依赖项
RouteCollectionInterface::class - 存储所有基本应用程序路由 APP_ENV - 应用程序运行的环境
依赖项
ServerRequestFactoryInterface::class - 需要使用测试套件进行测试
下一步:列表中的第1项
路线图/待办事项
- 添加文档
- 编写测试以测试前端控制器集成/完整请求周期测试(以及配置和路由加载 - 但几乎不可测试)
- 也许可以创建自己的PSR-7实现
- 未来,在所有组件中分别分离接口和实现,这不应有深远的影响,并且只会影响composer.json文件
- services.php和services.env.php应该具有相同的格式!!(当前默认服务和路由实例化了路由集合和容器本身,并返回它,而环境特定文件返回一个可调用项,该可调用项使用容器/路由集合) - 当前由于加载顺序而无法实现,但实际上也不是一个大问题
- 向异常和视图监听器添加更多测试
- 添加一个响应发射器以输出响应,并对其进行测试
- 向内核HTTP异常添加默认消息
- 所有配置文件可能都应该是一些示例文件 - 添加另一个services文件以加载自己的服务,因为当使用composer update时,这些文件将被覆盖