2014-11-17 75 views
6

我正在創建一個命令來從文件生成帳戶。在命令中,我通過了一些論據。Symfony 2:驗證控制檯命令參數

$this 
    ->setName('batch:create') 
    ->setDescription('xyz') 
    ->setHelp('xyz') 
    ->addArgument('account-id', InputArgument::REQUIRED, "Set the account id.") 
    ->addArgument('name', InputArgument::REQUIRED, "Set the account name."); 

我只是想,如果有什麼辦法可以檢查通過的參數類型。現在我檢查它像這樣,

if (is_numeric($input->getArgument('account-id'))) { 
    // .... 
    } 

反正我有可以創建檢查類型驗證,我只需要調用驗證功能。

if ($input->validate() === false) { 
    // show error message and return. 
    } 
+0

我已經用一些新的細節更新了我的答案,看起來我們現在有了一個更好的解決方案。 – kix

回答

9

不幸的是,目前在Symfony中沒有辦法實現命令參數驗證。實施這些檢查的最佳方法是在命令中重寫Symfony\Component\Console\Command::initialize方法,然後在那裏應用驗證規則,如果傳遞參數無效則拋出異常。

更新:馬蒂亞斯Noback已實施symfony-console-formhttps://github.com/matthiasnoback/symfony-console-form),看起來像實現Matthias\SymfonyConsoleForm\Console\Command\FormBasedCommand界面會給你通過表單組件基本驗證能力(與驗證,以測試它,雖然)。

+0

你說得對。我認爲現在我必須保持現有的代碼不變。 –

+0

感謝您的鏈接。會試試看。 –