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:stop
和 server: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
现在只使用从 8000
到 8100
的第一个可用空闲端口。