2017-05-25 88 views
0

我正在編寫主要用作控制檯應用程序的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()方法。特質可能有用嗎?

那麼我應該如何設計一個解決方案?這是否有任何模式?我的服務應該實現像loggableproressable這樣的界面嗎?或者使用Logger/Progress對象並使用某種DI(依賴注入)?因爲我不想寫這些log()progress()方法的功能不止一次。此外,我不能在web應用程序中使用進度功能。一個原因是我不知道如何去(如果它可能與PHP在這裏),但這將是另一個問題。

在此先感謝。

回答

0

作爲一名PHP程序員,您應該意識到並使用PSR。在這種情況下,您應該使用依賴注入和LoggerInterfaces

對於Web應用程序,您應該將您的組合根配置爲使用記錄到文件的記錄器實現。對於控制檯應用程序,您應該登錄到終端。

組合根是配置您的依賴注入容器(DIC)的地方。查看更多關於Yii DIC here

爲了做到這一點,您應該能夠通過環境變量或php_sapi_name在這兩個組合根之間切換。

相關問題