noctis / kickstart
Kickstart项目的系统基础部分。
Requires
- php: ~8.1.0
- composer-runtime-api: ^2
- azjezz/psl: ^2.3
- fig/http-message-util: ^1.1
- filp/whoops: ^2.14
- laminas/laminas-diactoros: ^2.24
- laminas/laminas-httphandlerrunner: ^2.4
- laminas/laminas-session: ^2.16
- nikic/fast-route: ^1.3
- php-di/php-di: ^6.4
- psr/container: ^1.1|^2.0
- psr/http-factory: ^1.0
- psr/http-message: ^1.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
- symfony/console: ^6.2
- twig/twig: ^3.4.3
Requires (Dev)
- php-standard-library/psalm-plugin: ^2.2
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.7
- symfony/var-dumper: ^6.2
- vimeo/psalm: ^5.4
- 4.0.x-dev
- 4.0.2
- 4.0.1
- 4.0.0
- 4.0.0-RC5
- 4.0.0-RC4
- 4.0.0-RC3
- 4.0.0-RC2
- 4.0.0-RC1
- 3.2.x-dev
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.x-dev
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.0
- 2.3.2
- 2.3.1
- 2.3.0
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dependabot/composer/twig/twig-3.14.0
This package is auto-updated.
Last update: 2024-09-09 20:42:16 UTC
README
这是什么?
这是Kickstart项目的系统(基础)部分。Kickstart项目本身由两部分组成
- 应用部分 -
noctis/kickstart-app
包, - 系统部分 - (即本部分)。
此包包含Kickstart应用正常运行所需的所有系统文件。这是Kickstart项目中用户不应该修改的部分,但在应用中可以自由扩展。
它有什么好处?
Kickstart被创建为构建微型和小型PHP应用的基础,无论是基于Web的还是基于命令行的。
它具体做什么?
它为你提供基础代码,允许你跳过构建像处理HTTP请求和响应或数据库连接这样的基本功能,直接进入实现应用“核心”逻辑。
所以...像框架一样?
是的,你可以这么说。不过,我不会把这个项目称为框架。或者说,它不是迷你框架。我认为它不足以符合“框架”的定义。
为什么我应该使用Kickstart而不是Laravel或Symfony?
这是个好问题。那些项目都很不错。在很多方面,它们比Kickstart更好。它们提供了更多的功能,并且拥有更大的社区。但是...它们也相当庞大,处理单个请求需要调用很多不同的方法和函数,我个人并不喜欢这种开销。
现在,请别误会。上面提到的那些框架对于许多用例来说都很合适。对于中等或大型应用,我不会推荐Kickstart - 我会使用其中之一。但是,对于小型、相对简单的应用来说,它们可能就是过度设计了。
那么...我应该何时使用Kickstart?
如果你想创建一个微型或小型基于Web或命令行的PHP应用,该应用对数据库执行一些相对静态的SQL查询。例如:你想要一个应用,它有一个单字段网页表单,从该表单获取用户的输入,将其与数据库进行对比,并最终展示与提供值匹配的行列表。好吧,这是一个极其简单的应用示例,但我认为你应该明白这个思路。
Kickstart提供了哪些组件?
- 路由,基于FastRoute,由Nikita Popov创建,以及我对PSR-15的请求处理器的自行实现,
- 依赖注入 - 基于PHP-DI,由Matthieu Napoli创建,
- 数据库连接 - 基于EasyDB,由Paragon Initiative Enterprises创建,
- 处理HTTP请求与响应 - 基于 Laminas 的 Diactoros、HTTP请求处理程序运行器 和 Session 组件,遵循 PSR-7
- HTTP中间件 - 我自己的实现,遵循 PSR-15 的中间件规范
- 模板引擎 - 基于 Symfony 的 Twig 3,
- CLI(控制台)命令 - 基于 Symfony 的 Console 组件
- 配置 - 基于广受欢迎的 PHP dotenv,由 Vance Lucas 提供。
这些都是现成的免费组件,我已经将它们“整合”成一个可工作的骨架应用程序,因此您不必这样做。
但是为什么没有XYZ组件呢?
我曾考虑添加几个额外的组件,例如CSV文件处理、国际化(i18n)、邮件发送...但我决定留给最终用户。如果您愿意,您可以自由地添加它们。我将在文档中包含如何做到这一点的示例。
但我不需要控制台组件或数据库连接组件!
您可以选择不使用它们。它们的存在不会减慢您的应用程序,至少不会明显。如果您真的想完全去除某个组件,您可以在 Kickstart 应用程序 文档的“食谱”部分找到如何做到这一点的方法。
好吧,那我是怎么安装这个的?
这个包不是用来单独安装的。您应该基于 noctis/kickstart-app
包创建一个新的项目。这将安装这个包。
等等。“kickstart-app”?我以为这个项目叫“kickstart”?
是的,项目叫做“Kickstart”,但 - 再次 - 它有两个部分
- 核心系统,称为
noctis/kickstart
, - 应用程序,称为
noctis/kickstart-app
。
noctis/kickstart
是基础系统,它会被安装到您的 vendor
文件夹中。这可以被称为“系统空间”。该包的系统(核心)文件
- 不应 被用户修改,并且
- 应可升级(通过
composer update
)。
noctis/kickstart-app
是基于 noctis/kickstart
包构建的骨架应用程序。它包含
- 用户可以修改的文件,以及
- 示例“占位符”文件,展示如何利用
noctis/kickstart
的功能。
这很愚蠢。应该只有一个包,包含所有东西!
你很愚蠢(开玩笑)。这就是1.x版本Kickstart的用法。
一点历史。在我为正在工作的一个特定应用程序进行 Kickstart 的修改后,并需要将这些更改应用到我在工作的其他基于 Kickstart 的应用程序中,我意识到两件事
- 手动应用另一个项目中更改的一部分来更新一个项目中的文件是愚蠢的,尤其是考虑到我有
composer update
可用,并且 - 有一些文件用户应该能够修改,而有一些则应该避免修改。
如果那些不可修改的文件可以存放在 vendor
文件夹中,那么它们就很容易更新了。等等,它们可以放在那里!所以我开始区分这两种类型的文件。最后,只剩下几个文件/类需要分解,因为它们属于两个世界。
就这样,创建了 noctis/kickstart
和 noctis/kickstart-app
包。
那么,当我需要更新系统文件中的一个时会发生什么?
嗯,如果您需要更新基础系统包,即 noctis/kickstart
,您只需要运行
composer update noctis/kickstart
如果您需要更新骨架应用程序,即 noctis/kickstart-app
,如果它是一个基于它的现有应用程序,您将需要手动执行更新。
为什么它需要 PHP 8.1?
Kickstart 3.x 以前需要 PHP 8.0。我还在犹豫是否应该将 Kickstart 4.x 的要求提升到 PHP 8.1,但后来PHP 8.0 的支持已经结束,PHP 有点为我做了决定 :)
PHP 8.1 就是这样。