3.0 版有什么新内容?
即将推出。我保证。很多人都知道,我最近完成了一本为 O’Reilly Media 创作的新书——Modern PHP。我为这本书即将出版而激动,它应该会在一个月或两个月内出现在书架上。不幸的是,写书是一项耗时费力的工作。我也有一份 9:00 至 17:00 的工作。生活偶尔会出现意外。借口,借口……我知道 :) 我现在有空余时间再次开始处理 Slim。那么发生了什么呢?很多事情。
新网站
在本周,我启动了一个闪亮的全新网站,网址为 https://slim.php.net/。它的各方面都更好,而且位于 GitHub Pages 上。如果你看到了某些可以改进的地方,网站代码也在 https://github.com/codeguy/Slim-Website 上公开提供。发送一个合并请求,我会合并你的更改。
新 IRC 频道
我注册了一个名为 #slimphp
的新主要 Freenode 频道。我集中精力每天登陆一次,并且只要你给频道留言,我都会收到通知。如果你有任何问题或只是想聊天,就进入 #slimphp
频道并打个招呼。
新文档
我目前正在为 3.0 版重写框架文档。这还远未完成,但你可以在 http://docs-new.slimframework.com/ 上阅读正在编写的文档(网址可能会更改)。与新网站一样,该文档托管在 GitHub 上的 https://github.com/codeguy/Slim-Documentation。如果你能够改进文档,请发送一个合并请求,我会合并你的更改。
3.0 版
下一个框架版本将是 3.0 版。这是一个涉及框架所有部分的重大更新。以下是一些亮点
依赖注入
\Slim\App
类会扩展 Pimple,以便我们可以轻松地将第三方组件注入到 Slim 应用程序或覆盖 Slim 的许多内部对象,例如请求、响应或视图对象。
支持 PSR-7
Slim 的 HTTP 请求和响应抽象将支持 PSR-7。这意味着它们的界面将与之前的版本有显著差异。过去,每个 Slim 应用程序都有一个请求对象和一个响应对象,它们会在整个应用程序中通过引用传递。
然而,版本 3 将请求和响应对象视为值对象。各中间件层和应用程序路由会将最新请求和响应对象作为参数接收。各中间件层和路由回调负责返回更新的 HTTP 响应对象。
HTTP 请求和响应对象也是不可变的。你必须使用合适的 withStatus()
、withHeader()
、withBody()
等请求和响应对象方法,才能创建和返回具有指定更改的内容的新请求或响应对象。你可以在 https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md 中的 PSR-7 文档中,阅读有关新界面的更多信息。
这还让第三方中间件可以与 Slim 框架一起使用。例如,或许你发现了为其他框架设计的 PSR-7 中间件。然而,因为使用 PSR-7 接口,所以该中间件也与 Slim 兼容。
Slim 的 PSR-7 更改听起来比较复杂,但实际上它们相当简单。我很快会在新文档中提供更多深入的信息。你可以在以下网址阅读有关 PSR-7 的更多信息
- https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md
- https://mwop.net/blog/2015-01-26-psr-7-by-example.html
- https://mwop.net/blog/2015-01-08-on-http-middleware-and-psr-7.html
使用接口编写代码
3.0 版本将使用接口编写代码,这样所有内部应用程序方法都将使用接口而不是具体类实现。这意味着如果你愿意可以轻松地为 Slim 应用程序的任何依赖项提供自己的实现,并且可以使用 Pimple 容器服务注入或覆盖依赖项。
路由回调绑定
如果你使用闭包作为路由回调例程,这些闭包将会绑定到 \Slim\App
实例。这意味着你可以通过 $this
关键字在闭包内部访问应用程序实例。
<?php
$app = new \Slim\App();
$app->get('/hello', function ($req, $res) {
$this['view']->display('profile.html', [
'name' => 'Josh',
'url' => 'https://joshlockhart.com'
]);
});
更简单的代码库
框架代码库将变得更简单。以前,\Slim\App
类包含许多与渲染或响应标头有关的方法。现在情况不再如此。我已将许多方法迁移到其他适当的类中。例如,将删除 \Slim\App::contentType()
和 \Slim\App::status()
,你必须使用响应对象的方法来修改 HTTP 响应。将删除 \Slim\App::render()
方法,你必须使用视图对象的 render()
或 display()
方法来代替。以上只是几个示例。我相信这些更改让 Slim 更小、更直观,而且更易于使用。
请求获取
过去的一年中,我让许多杰出的拉取请求 languish 了。对此我表示抱歉。我很快将策划这些请求,合并我能合并的,并关闭其余的。我无法使用所有请求,甚至包括一些好的请求。在我更好地组织问题跟踪之前,我建议你暂缓发送新的拉取请求。
分支策略
Slim 将采用一种新的、更简单的分支策略。将有一个 master
分支。分支 HEAD
引用将表示最新的不稳定代码。稳定版本将被标记为数字版本号(如 3.0.0
)。
以前,我尝试使用 Git Flow 分支策略,但事实证明它对于该项目而言过于复杂,并带来了比其他任何事情更多的混乱和混乱。
当前的 master
分支将重命名为 legacy-2.x
(或类似名称),而当前的 develop
分支将重命名为 master
。所有未来的开发活动都将在新重命名的 master
分支上恢复。这个名称更改可能会影响现有的拉取请求。如果这样,我很抱歉。但这是对项目的未来和我自己理智的最佳决定。此分支名称更改尚未发生,但它将在 3.0 版本发布之前发布。
路线图
我很快就在项目的 GitHub Wiki 上制定一个新的路线图。我将在可用后立即宣布此消息。
单元测试
当前,develop
分支中的许多单元测试都已损坏。我最近一直在快速移动并破坏一些东西(我的意思是,它就是开发分支)。这些测试将很快得到修复。