Symfonyob娱乐下载 3.2的新功能:控制台的改进(第2部分)
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
在这个由三部分组成的系列文章的第二部分中,我们将介绍Symfony 3.2添加到ob娱乐下载控制台组件以改善其DX(开发者体验)。
读了第1部分而且第3部分本系列文章的第一部分,介绍Symfony 3.2中控制台组件的新特性。ob娱乐下载
引入了一个新的终端类
提供的
生田斗真šVotruba,法比安效力在# 19012.
控制台的应用程序
类定义了几个方法来获取终端窗口的尺寸(高度和宽度):
1 2 3 4 5 6
使用ob娱乐下载\组件\控制台\应用程序;$应用程序=新应用程序();$维=$应用程序->getTerminalDimensions ();// [$width, $height]$高度=$应用程序->getTerminalHeight ();$宽度=$应用程序->getTerminalWidth ();
从技术上讲,为各种终端和操作系统获取这些信息是一个复杂、复杂、缓慢且容易出错的过程。在Syob娱乐下载mfony 3.2中,我们决定将所有这些逻辑转移到一个新的终端
类:
1 2 3 4
使用ob娱乐下载\组件\控制台\终端;$高度= (新终端())->获得();$宽度= (新终端())->getWidth ();
此外,我们改进了获取/设置终端尺寸的逻辑,以优先考虑环境变量的使用。如果列
而且行
定义环境变量,终端
使用它们的值来获取维度。在设置终端尺寸时,终端
创建或更新这些变量的值。
这个新终端
类将在将来用于获取/设置除尺寸外关于终端的更多信息。现在,当终端窗口很小时,这些更改允许我们修复进度条助手中的一些边缘情况。
引入了一个新的StreamableInputInterface
在Syob娱乐下载mfony 2.8中,我们引入了一个新的控制台命令的样式指南这简化了创建看起来一致的命令。但是,这些命令很难测试,特别是在使用问()
请求用户输入的助手。
在Syob娱乐下载mfony 3.2中,我们引入了一个新的StreamableInputInterface
并做出了抽象的ob娱乐下载
实现它。此更改允许在单个类中集中管理输入流,并使QuestionHelper
相关代码更容易测试。
在ConsoleLogger中增加了一个haserror()方法
提供的
尼古拉斯Grekas
在# 19090.
在Syob娱乐下载mfony 3.2中,ConsoleLogger
类包含hasErrored ()
方法,返回真正的
只要一条消息错误
已登录级别。这样,您就不必添加任何自定义逻辑来决定命令是否应该返回错误退出码(退出(1)
)或否。
增加了一个“可锁定”特性
在Syob娱乐下载mfony 2.6中,我们引入了一个锁处理程序提供一个简单的抽象,通过文件锁来锁定任何东西。这个锁处理程序主要用于避免并发问题,防止同一命令的多次执行:
12 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载\组件\文件系统\LockHandler;类UpdateContentsCommand扩展命令{受保护的函数执行(InputInterface$输入, OutputInterface$输出){$锁=新LockHandler (的内容更新:);如果(!$锁->锁()){//管理锁定错误}/ /……}}
在Syob娱乐下载mfony 3.2中,我们使锁处理程序更容易使用LockableTrait
.此特性提供了lock ()
方法创建一个以当前命令命名的非阻塞锁:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用ob娱乐下载\组件\控制台\命令\LockableTrait;类UpdateContentsCommand扩展命令{使用LockableTrait;受保护的函数执行(InputInterface$输入, OutputInterface$输出){如果(!$这->锁()){//管理锁定错误}/ /……}}
您还可以创建具有自定义名称的锁,甚至可以创建等待任何现有锁释放的阻塞锁:
1 2 3 4
如果(!$这->锁(“custom_lock_name”){…}//第二个布尔参数告诉锁是否阻塞如果(!$这->锁(“custom_lock_name”,真正的){…}
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
我想指出的是,第一个改进主要修复了这个问题:
https://github.com/ob娱乐下载symfony/symfony/issues/13019#issuecomment-67627942
没有更多丑陋的symfonob娱乐下载y演示应用程序安装。一周前我在课堂上遇到过……最后一次!:)