控制台和Web应用程序的输出进度
我正在编写主要用作控制台应用程序的yii2应用程序。我有从服务器获取一些数据的组件或(微)服务,处理它们并将我需要的信息保存到db。当然,有几个用于循环,在这些循环中,我使用yii\helpers\Console::updateProgress
或仅使用echo
来输出当前进度,以观察进度和测试输出(如,以xxx产品开头)。在某些事件中,我使用Yii::info()
或Yii::error()
等记录重要信息。通常是一个cron处理任务,如pullProductUpdates
或其他东西,我。控制台和Web应用程序的输出进度
但是在某些情况下,我需要在我的web应用程序中使用该方法(即pullProductUpdates
)。但是,不能有任何echo
命令活动或Console::updateProgress
命令。
当然,我没有来自Yii的日志记录方法的问题,因为我配置了日志目标,并且它们不会回显某些内容。但我不知道如何处理echo
命令...
一种方法是检查是否设置了$_SERER['REMOTE_ADDR']
设置与否。在控制台,它将评估为null
,所以我可以绕if {} else {}
。一种可能更好的解决方法是编写log()
或progress()
方法。特质可能有用吗?
那么我应该如何设计一个解决方案?这是否有任何模式?我的服务应该实现像loggable
或proressable
这样的界面吗?或者使用Logger/Progress对象并使用某种DI(依赖注入)?因为我不想写这些log()
或progress()
方法的功能不止一次。此外,我不能在web应用程序中使用进度功能。一个原因是我不知道如何去(如果它可能与PHP在这里),但这将是另一个问题。
在此先感谢。
作为一名PHP程序员,您应该意识到并使用PSR。在这种情况下,您应该使用依赖注入和LoggerInterfaces。
对于Web应用程序,您应该将您的组合根配置为使用记录到文件的记录器实现。对于控制台应用程序,您应该登录到终端。
组合根是配置您的依赖注入容器(DIC)的地方。查看更多关于Yii DIC here。
为了做到这一点,您应该能够通过环境变量或php_sapi_name在这两个组合根之间切换。