my_bundle:
algorithm: blowfish # One of 'md5', 'blowfish', 'sha256', 'sha512'
この構成は、次の構成ツリーによって行われます。
// Algorithms and constants to check
$algorithms = array(
'md5' => 'CRYPT_MD5',
'blowfish' => 'CRYPT_BLOWFISH',
'sha256' => 'CRYPT_SHA256',
'sha512' => 'CRYPT_SHA512',
);
$rootNode
->children()
->scalarNode('algorithm')
->isRequired()
->beforeNormalization()
->ifString()
->then(function($v) { return strtolower($v); })
->end()
->validate()
->ifNotInArray(array_keys($algorithms))
->thenInvalid('invalid algorithm.')
->end()
->validate()
->ifTrue(function($v) use($algorithms) {
return 1 != @constant($algorithms[$v]);
})
->thenInvalid('algorithm %s is not supported by this system.')
->end()
->end()
->end();
各アルゴリズムには異なるパラメーターが必要なため、選択したアルゴリズムに基づいて、ルート ノードの子としてそれらを動的に追加するにはどうすればよいですか?
たとえば、アルゴリズムが「blowfish」の場合、「cost」という名前のスカラー ノードが存在する必要がありますが、「sha512」の場合、スカラー ノードは「丸められ」、それぞれ異なる検証ルールが適用されます。
編集:私が本当に必要としているのは、現在のアルゴリズムを理解することです(どうすればいい$rootNode
ですか?)。
$rootNode->append($this->getBlowfishParamsNode());
$rootNode->append($this->getSha256ParamsNode());
$rootNode->append($this->getSha512ParamsNode());
編集:私が達成したい可能な構成:
my_bundle:
algorithm: blowfish
cost: 15
別:
my_bundle:
algorithm: sha512
rounds: 50000
そしてもう一つ:
my_bundle:
algorithm: md5