3

私はSymfony2のツリービルダーを使用しています。これには、ここで説明されているいくつかの基本的な検証ルールがあります:http ://symfony.com/doc/current/components/config/definition.html#validation-rules

正規表現でも検証する方法はありますか?

これが現在のやり方ですが、これが「ベストプラクティス」であるかどうかはわかりません。検証したい設定項目はですroot_node

config.yml

my_bundle:
    root_node: /some/path    # this one is valid

Configuration.php

$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('my_bundle');

$rootNode
    ->children()
        ->scalarNode('root_node')
             ->end()
        ->end()
    ->end();

return $treeBuilder;

MyBundleExtension.php

$nodePattern = '#/\w+(/w+)*#';
if (! preg_match($nodePattern, $config['root_node'])) {
    throw new \Exception("root_node is not valid: must match the pattern: $nodePattern");
}

だから、私が本当に求めているのはTreeBuilderメソッドです。

->validate()->ifNotMatchesRegex()->thenInvalid()

または、それが失敗した場合、検証ルールを適用するための最良のアプローチ。

4

1 に答える 1

5

できることはifTrue、カスタム関数でメソッドを使用することです。このようなもの:

$rootNode
    ->children()
        ->scalarNode('root_node')
            ->validate()
            ->ifTrue(function ($s) {
                return preg_match('#/\w+(/\w+)*#', $s) !== 1;
            })
                ->thenInvalid('Invalid path')
            ->end()
       ->end()
   ->end();

私があなたの正規表現に加えたわずかな変更に注意してください。

于 2012-12-11T16:03:04.193 に答える