在2018年12月的里斯本SymfonyCon会议上,Symfony框架的创建者Fabien Potansier引入了一个symfony.phar-一种用于基于官方项目模板快速创建Symfony应用程序的工具: skeleton , website-skeleton或demo 。 它还允许您运行本地Web服务器进行开发。
然后用Golang语言重写了该工具,该工具允许实现许多其他功能,例如对本地Web服务器的https协议的支持,与SymfonyCloud的紧密集成等等! 亲爱的读者,我邀请您更详细地了解此工具,因为它不仅在Symfony框架中起作用。
在本文中,我们将在本地开发的背景下查看该工具,并且不会影响与SymfonyCloud的集成。
项目创建
要基于官方模板之一创建新的Symfony项目,您需要运行以下命令:
$ symfony new [--full | --demo] <path-to-project>
默认情况下,使用最小骨架模板。 要安装网站骨架,您需要使用--full
选项运行命令。 因此,要安装演示项目,必须使用--demo
选项运行命令。
在底层, symfony new
执行composer create-project
命令,然后初始化一个新的Git存储库并立即创建一个Initial commit。

本地服务器
要启动服务器,只需在应用程序的根目录中运行命令
$ symfony serve

它将分析使用的计算机上的可用SAPI,并使用以下优先级从现有的SAPI中选择最佳的:首先放置PHP FPM,然后放置PHP CGI,最后放置PHP CLI。 可以使用以下命令查看可用的SAPI列表:
$ symfony local:php:list

之后,团队将启动服务器,该服务器将在地址127.0.0.1
处可用,并从8000
开始选择可用端口。
默认情况下,服务器以交互方式启动。 我们立即看到服务器和应用程序日志,但是我们的终端被阻止了。 可以在守护程序模式下启动服务器。 为此,请在运行symfony serve
命令时添加-d
选项。
可以通过运行以下命令查看日志:
$ symfony server:log
您还可以使用以下命令查看正在运行的服务器的状态:
$ symfony server:status
要停止正在运行的服务器,请使用以下命令:
$ symfony server:stop
UPD:以前,我们使用symfony / web-server-bundle软件包启动服务器。 随着Symfony CLI的到来,此软件包变得不那么相关,因为它只能使用PHP CLI SAPI启动服务器,并且不支持HTTPS,域名,PHP FPM SAPI等。
TLS支持
某些第三方服务或库要求您使用HTTPS协议发送请求。 通过使用以下命令安装其他组件,Symfony CLI可以非常轻松地配置TLS支持:
$ symfony server:ca:install

然后只需重新启动浏览器,然后瞧-已配置TLS支持! 使用symfony serve
命令启动服务器,然后可以使用HTTPS协议转到该站点。
我不是很想在https://127.0.0.1:8000
或https://localhost:8000
上打开所有项目,但是您呢? 这带来了不便:如果同时运行多个项目,则需要记住该项目在哪个端口上运行; 服务器重新启动时,端口可以更改,等等。
Symfony CLI也可以解决此问题! 它为我们提供了一个代理服务器,您可以使用它创建漂亮的域名。 为此,请使用以下命令将所需的域名绑定到我们的项目:
$ symfony proxy:domain:attach <domain-name>

因此, demo-project.com
域绑定到项目目录。 接下来,我们需要使用以下命令启动代理服务器:
$ symfony proxy:start

我们以守护程序模式启动了代理服务器,并且可以在我们的地址http://127.0.0.1:7080
,我们可以在浏览器中打开它:

在这里,我们将看到域列表,文件系统中项目的路径以及每个项目的服务器状态。 在此屏幕截图中,您可以看到所有服务器都处于“已Stopped
状态,即它们尚未运行。 下一步,我们需要在操作系统设置中添加此代理服务器

这样就完成了代理服务器的设置,然后您需要使用已知的symfony serve
命令启动服务器。 除了带有端口的IP地址,我们还将看到我们的域名,可以在浏览器中使用它! .wip后缀将添加到所有域名。

也就是说,在使用代理服务器流的情况下,项目的启动会有所变化:
- 我们启动代理服务器
$ symfony proxy:start
- 我们启动应用程序的服务器
$ symfony serve
为了完成该项目的工作,我们“镜像”了上述操作:
- 我们停止服务器
$ symfony server:stop
- 停止代理服务器
$ symfony proxy:stop
为了简化这些操作,我建议使用GNU Make实用程序。
PHP版本切换
如果在不同的项目上使用不同版本的PHP,则可能会遇到在版本之间进行切换的问题。 拥有某种自动化工具会很好,对吗? Symfony CLI可以解决此问题! 您只需要在项目的根目录中创建.php-version
文件,并指定所需的版本作为内容即可。
$ echo "7.2" > .php-version

如您在上面的屏幕快照中所见,Symfony CLI读取了.php-version文件,并使用该文件中指定的版本启动了服务器。
另外,Symfony CLI为我们提供了PHP CLI的包装,该包装还考虑了.php-version文件中指定的PHP版本。 也就是说,如果您需要调用控制台脚本,例如bin/console
,请使用它。
$ symfony php

为方便起见,您可以为此命令创建别名以节省时间并避免在编写命令时出错。 例如,我为自己创建了一个别名sphp :
$ echo "alias sphp='symfony php'" >> ~/.bash_profile && source ~/.bash_profile
Symfony CLI为Composer提供了类似的包装器,因此您也不会遇到任何问题。 为了方便起见,您可以为此包装创建别名。 我有这个作曲家 :
$ echo "alias scomposer='symfony composer'" >> ~/.bash_profile && source ~/.bash_profile
检查有漏洞的软件包
另外,Symfony CLI提供了一个命令来检查项目中易受攻击的作曲家程序包。 您不再需要在项目中安装Symfony Security Checker依赖项。 另外, 官方文档建议Symfony CLI内置的版本效果更好,因为它不会向官方API发出HTTP请求。 您可以使用以下命令运行测试:
$ symfony security:check

结论
Symfony CLI是本地应用程序基础结构中非常方便的组件。 他具有运行支持HTTPS协议的Web服务器,创建域名,自动切换每个项目的PHP版本以及检查漏洞依赖项的能力。
可以在此链接上找到该组件的正式文档。
任何问题都可以在GitHub上的官方symfony / cli存储库中进行描述。
在评论中分享使用此工具的经验。
感谢您的关注!