dariorieke/lightframework

该软件包最新版本(dev-master)没有提供许可信息。

现代、简单的php框架

dev-master 2022-05-22 12:35 UTC

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项

路线图/待办事项

  1. 添加文档
  2. 编写测试以测试前端控制器集成/完整请求周期测试(以及配置和路由加载 - 但几乎不可测试)
  3. 也许可以创建自己的PSR-7实现
  4. 未来,在所有组件中分别分离接口和实现,这不应有深远的影响,并且只会影响composer.json文件
  5. services.php和services.env.php应该具有相同的格式!!(当前默认服务和路由实例化了路由集合和容器本身,并返回它,而环境特定文件返回一个可调用项,该可调用项使用容器/路由集合) - 当前由于加载顺序而无法实现,但实际上也不是一个大问题
  6. 向异常和视图监听器添加更多测试
  7. 添加一个响应发射器以输出响应,并对其进行测试
  8. 向内核HTTP异常添加默认消息
  9. 所有配置文件可能都应该是一些示例文件 - 添加另一个services文件以加载自己的服务,因为当使用composer update时,这些文件将被覆盖