2014-10-29 60 views
1

當使用helplist命令時,我想幹淨地覆蓋Symfony\Component\Console的部分默認文本輸出。特別是,冗長選項的免費線換行讓我感到很困惑,儘管我可能最終還是想稍微改變其他的幫助/列表文本。覆蓋默認的控制檯幫助文本

即這一行輸出:

--verbose -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug.

會更好,如果我可以改變它的東西,如:

--verbose -v|vv|vvv Set verbosity level.

我能繼承Symfony\Component\Console\Application並覆蓋getDefaultInputDefinition()方法。

我也許可以使用組合getDefinition()setDefinition()來擺弄InputDefinition對象。

但是,這些似乎不是很好維護。

有沒有其他更好的方法來實現這個目標?

+0

「詳細程度級別」沒有解釋有關該選項的任何內容,它只是重複選項名稱和值... – 2014-10-29 22:50:50

+0

這是一個填充示例。我本可以說「Lorem ipsum dolor」。關鍵是,作爲一名長期的UNIX命令行用戶,我發現控制檯的默認幫助和列表文本不一致和難看。我想改變它以符合大多數Unix命令。 – CXJ 2014-10-29 23:08:58

+0

我發現Console的默認幫助是_helpful_ - 比看起來漂亮或符合標準更重要。也就是說,你提出了一個有效的觀點,應該可以用可維護的方式來重寫這些觀點。 – 2014-10-30 10:59:27

回答

1

試試這個。我不確定它會工作,但看起來像最接近的解決方案。

use Symfony\Component\Console\Application; 
use Symfony\Component\Console\Input\InputOption; 

public function overrideVerboseInputOption(Application $application) 
{ 
    $verboseOption = $application->getDefinition()->getOption('verbose'); 

    $customVerboseOption = new InputOption(
     $verboseOption->getName(), 
     $verboseOption->getShortcut(), 
     InputOption::VALUE_NONE, 
     "Set verbosity level" 
    ); 

    $options =& $application->getDefinition()->getOptions(); 

    unset($options['verbose']); 

    $application->getDefinition()->addOption($customVerboseOption); 
} 
+0

我會試試看看它是如何工作的。謝謝。 – CXJ 2014-10-30 16:24:44

+0

它引發以下錯誤。我會盡力讓它工作。 致命錯誤:帶有消息的未捕獲異常'LogicException''使用InputOption :: VALUE_NONE模式時無法設置默認值。 in ../ vendor/symfony/console/Symfony/Component/Console/Input/InputOption.php:162''' – CXJ 2014-10-30 16:42:21

+0

@CXJ抱歉,我的參數順序不正確。我編輯了代碼,現在試試:) – 2014-10-30 17:05:07