2013-04-21 47 views
1

我有一個可以有各種鍵的數組。但是,總是存在兩個必需的鍵。我現在使用OptionsResolver組件。這是工作正常,直到沒有任何額外的密鑰。我也考慮過驗證器組件,據我瞭解,這是相同的行爲。所以我需要總是設置完整的鍵列表,但正如我上面寫的,我只需要驗證其中的一些。有沒有辦法解決這個問題?OptionsResolver組件和額外選項

謝謝!

回答

1

您好,您可以在OptionResolver中定義必需的,可選的和默認值。 也許我會給你一些例子所以它會比描述更容易:

$resolver = new Symfony\Component\OptionsResolver\OptionsResolver; 
$resolver 
    ->setRequired(['required1', 'required2']) 
    ->setOptional(['optional1', 'optional2']) 
    ->setDefaults(['defaultValue' => '123']) 
; 

$options = $resolver->resolve(
    [ 
    'required1' => 'test', 
    'required2' => 'test123', 
    'optional1' => 'opt' 
    ] 
); 

然後選擇將看起來像

[ 
    'defaultValue' => '123', 
    'required1' => 'test', 
    'required2' => 'test123', 
    'optional1' => 'opt', 
] 

,如果我們不設置required1required2在解決了數組,那麼我們得到了Symfony\Component\OptionsResolver\Exception\MissingOptionsException的例外。 如果我們給不知道的選項(未在setRequired,setOptional或setDefaults中定義),那麼我們得到了Symfony\Component\OptionsResolver\Exception\InvalidOptionsException異常。

我也考慮了Validator組件和我的理解有相同的行爲

您可以決定哪些值應該是「必需的」 ......但不知道如果我得到你的意思究竟是什麼

+0

感謝您的回覆。也許我寫錯了。事實是,我無法知道可選鍵之前。因此,我會得到你上面寫的例外。 – 2013-04-21 18:06:58

+1

是的...所以我認爲你不能用OptionsResolver做到這一點,或者我不知道如何;)我認爲你需要首先使用setOptional方法定義所有可選的選項。關於驗證組件,您可以創建自定義驗證器並在其中創建自己的邏輯,因此它不應該是問題。 – l3l0 2013-04-23 06:52:22

+0

我傾向於驗證器組件。不過,我已經使用OptionsResolver作爲其中一部分代碼的好工具。我認爲使用它們並不是一個好主意。我對嗎? – 2013-04-24 08:08:40