
Symfony 2 Configコンポーネントは、構成ファイルを操作するように設計されており、次の機能を提供します。
- サポートツリー設定
- ロード元の構成のコンポーネントの抽象化(リソース、リソースローダーなど)
- 任意の数の構成コンポーネントといくつかのアセンブリおよびマージルールのサポート
- 読み取り設定をキャッシュし、ソースファイルの1つを変更するときに自動的に再構築します
- さまざまなルールおよび解析エラーに関する詳細情報に従った構成の検証
このコンポーネント
の公式ドキュメントには、その使用に関する詳細情報が含まれています。 そして、このコンポーネントがどのように配置されているかを見てみましょう。
構成構造の定義
構成キーの種類
これは、構成図を説明するクラス図のようです。
ほとんどすべてのクラスの目的は、名前から明らかです。
ArrayNode
ノードが構成ツリーの構築に使用されることに注意してください。
ArrayNode
に事前定義されたノードだけでなく、他のいくつかの
ArrayNode
が
ArrayNode
が、事前定義された内部構造がまったく同じである場合、
PrototypedArrayNode
を使用できます。
設定の説明を作成するために、
Symfony\Component\Config\Definition\Builder\TreeBuilder
おおよそ次の方法で
Symfony\Component\Config\Definition\Builder\TreeBuilder
ます:
<?php use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; class Configuration implements ConfigurationInterface { public function getConfigTreeBuilder() { $treeBuilder = new TreeBuilder(); $rootNode = $treeBuilder->root('acme_demo'); $rootNode ->children() ->arrayNode('entities') ->addDefaultsIfNotSet() ->prototype('scalar')->end() ->defaultValue( array( 'Acme\BaseBundle\Entity\DefaultEntity1', 'Acme\BaseBundle\Entity\DefaultEntity2', ) ) ->end(); return $rootNode; } }
構成構造をすべて1か所で宣言する必要はありません。 これをパーツで
NodeBuilder
、
NodeBuilder
append
メソッドを使用してパーツを結合でき
NodeBuilder
。
正規化
正規化とは、ノードキー名とその値を、必要に応じて標準形式に縮小することです。 実際、XMLで記述されたノードを
<children> <child> </child> </children>
気にする
"children" => Array( [0] => " " )
ノードを正規化するには、
normalize()
メソッドが
Symfony\Component\Config\Definition\NodeInterface
ます。 また、
Symfony\Component\Config\Definition\BaseNode
も
preNormalize
メソッドがあります。 後者は、
foo_bar
および
foo-bar
キーを
foo_bar
するために使用されます。
ファイナライズ
ノードの最終化プロセスでは、構成内の読み取りのためにノードを準備し、宣言されたタイプとそのルールへの準拠を確認するための手順を実行します。
finalizeValue
は、
BaseNode
子孫の
finalizeValue
メソッドによって実行されます
NodeDefinition
の事前定義されたメソッドと
NodeDefinition
などの子孫を使用してデータ検証を実行し、
Symfony\Component\Config\Definition\Builder\ValidationBuilder
クラスに委任された高度な検証を使用します。
複数の部分からのデータを結合するためのルールは、
Symfony\Component\Config\Definition\Builder\MergeBuilder
ます。 チェックの委任は、
NodeDefinition
クラスのmerge()メソッドによって実行されます。 たとえば、選択した構成キーの値が初めて読み取られた後、他の構成ファイルによって再定義されないようにすることができます。
設定の検証/正規化/最終化のプロセスは次のようになります。
$configs = array($config1, $config2);
ビルダー
ご覧のとおり、
TreeBuilder
は
Symfony\Component\Config\Definition\Builder\NodeBuilder
クラスのインスタンスを使用して、構成記述
Symfony\Component\Config\Definition\Builder\NodeBuilder
を構築します。 したがって、構成するノードのタイプを適切に決定できます。 これを行うには、独自のバージョンの
NodeInterface
とその子孫
\Symfony\Component\Config\Definition\Builder\NodeDefinition
ます。 次に、
NodeBuilder
setNodeClass
メソッド
setNodeClass
呼び出し
NodeBuilder
。
設定構造を決定するプロセスは
ここで詳細に説明され
ます 。
ダンパー
設定構造が構築された後、
Symfony\Component\Config\Definition\Dumper
名前空間のさまざまなダンパーを使用してダンプできます。 現在、
YamlReferenceDumper
と
XmlReferenceDumper
2つのオプションがあります。 これらのダンパーは、たとえばコンソール
./bin/symfony config:dump-reference
から呼び出すときに使用され
./bin/symfony config:dump-reference
(
Symfony\Bundle\FrameworkBundle\Command\ConfigDumpReferenceCommand
)
設定をダウンロード
リソースとダウンローダー
Configコンポーネント自体には特定のブートローダー実装が含まれていないと言わなければなりません。 実装に必要なインターフェースのみを提供します。 さらに、ダウンロードされたデータのロード方法とターゲットコンテナも規制されていません。
Symfony\Component\DependencyInjection\Loader\YamlFileLoader
の実装を見ると、設定がコンテナに直接ロードされていることがわかります。
構成のキャッシュ
Symfony Configでは、
Symfony\Component\Config\ConfigCache
を使用して、ロードされた構成をキャッシュできます:
<?php use Symfony\Component\Config\ConfigCache; use Symfony\Component\Config\Resource\FileResource; $cachePath = __DIR__.'/cache/appSomeCacheFile.php';
たとえば、クラスでキャッシュ再構築アルゴリズムをカプセル化し、その後の作業のために
Symfony\Component\Config\ConfigCacheFactory
代わりに
Symfony\Component\Config\ConfigCacheFactory
使用できます。
ConfigCacheFactory
はコンストラクターで
ConfigCacheFactory
を受け入れ、キャッシュを再構築します。
コンポーネントの使用例
Symfony Configコンポーネントは、フレームワークなしでも使用できます。 例として、評判の良い
magickattによって書かれた小さなコードを以下に
示します。
<?php