Contributed by
Fabien Potencier
in #21039.

PHP 5.4版引入了内建的web server,可于开发过程中在本地运行你的PHP程序而毋须配置全功能的web服务器,如Apache或Nginx。

Symfony采纳这一技术已有一段时间,提供了一些控制台的命令以便 控制那个服务器。在Symfony 3.3中我们决定把这些命令移至一个全新的WebServiceBundle之中。

这样做的主要原因是,把命令移出可以让它们更易被发现同时还能去耦合。当没有使用 symfony/symfony 依赖时,可发现性尤其重要。此时,命令并不可用,除非你安装了 symfony/symfony 。有了这个独立的bundle,安装bundle的同时就会安装依赖,令整个过程更容易。

在任何情况下,新bundle都不会改变你使用本地web server时的工作方式:

1
2
3
4
5
6
7
8
9
# start a web server in the foreground and see the logs
# 在前台启动web server并查看日志
$  bin/console server:run
 
# start, stop and manage a web server in the background
# 在后台启动、停止以及管理web server
$  bin/console server:start
$  bin/console server:stop
$  bin/console server:status

DX开发体验改进

创建全新bundle还有一个好处就是引入了一些关于那些命令的DX(developer experience/开发者体验)提升,令你获得更多生产力。首先,你 不再需要传入完整的地址和端口server:stopserver:status 命令中:

1
2
3
4
5
6
7
8
9
10
$  bin/console server:start 127.0.0.1:8888
...
 
# no need to pass the address again
# 不需要再次传入地址
$  bin/console server:status
 
# no need to pass the address again
# 不需要再次传入地址
$  bin/console server:stop

能够这样是因为web server现在把地址存入了当前目录的一个PID文件中。此外 server:start 命令现在 自动查找可用的空闲端口

Symfony 3.3之前:

1
2
3
4
5
6
7
8
9
10
$  bin/console server:start
  [ERROR] A process is already listening on http://127.0.0.1:8000.
 
$  bin/console server:start 127.0.0.1:8001
  [ERROR] A process is already listening on http://127.0.0.1:8001.
 
# ... 24 attempts later / 24次尝试之后 ...
 
$  bin/console server:start 127.0.0.1:8024
  [OK] Web server listening on http://127.0.0.1:8024

Symfony 3.3:

1
2
$  bin/console server:start
  [OK] Web server listening on http://127.0.0.1:8024

除非你把端口作为参数传入,否则 server:start 现在只使用从 80008100 的第一个可用空闲端口。