Jarves\Configuration\Configs::parseConfig PHP Method

parseConfig() public method

Parses and merges(imports) bundle configurations.
public parseConfig ( array $configs ) : Bundle[]
$configs array
return Bundle[]
    public function parseConfig(array $configs)
    {
        $bundleConfigs = array();
        foreach ($configs as $bundleName => $priorities) {
            ksort($priorities);
            //sort by priority
            foreach ($priorities as $configs) {
                foreach ($configs as $file => $bundleElement) {
                    $bundle = $this->getJarves()->getBundle($bundleName);
                    $indexName = $this->normalizeBundleName($bundle->getName());
                    if (!isset($bundleConfigs[$indexName])) {
                        $bundleConfigs[$indexName] = new Bundle($bundle, $this->getJarves());
                    }
                    try {
                        $bundleConfigs[$indexName]->import($bundleElement, $file);
                    } catch (\Exception $e) {
                        throw new \RuntimeException(sprintf('Can not import configuration %s of bundle %s', $file, $bundleName), 0, $e);
                    }
                }
            }
        }
        return $bundleConfigs;
    }

Usage Example

コード例 #1
0
ファイル: BundleConfigTest.php プロジェクト: jarves/jarves
    public function testFileImportSaveMixed()
    {
        $configs = new Configs($this->getJarves());
        $this->setupFiles();
        $bundle = new TestsFileImportBundle();
        $configStrings = $configs->getXmlConfigsForBundle($bundle);
        $configObjects = $configs->parseConfig($configStrings);
        $testBundleConfig = $configObjects['testsfileimport'];
        $this->assertNotNull($testBundleConfig);
        $export = $testBundleConfig->exportFileBased('objects');
        $exportCaches = $testBundleConfig->exportFileBased('caches');
        $this->assertStringEqualsFile($this->getJarvesObjectsXmlFile(), $export, 'no changes');
        $this->assertStringEqualsFile($this->getJarvesXmlFile(), $exportCaches, 'no changes');
        $objects = $testBundleConfig->getObjects();
        current($objects)->setId('TestChanged');
        $testBundleConfig->setObjects($objects);
        $caches = $testBundleConfig->getCaches();
        $caches[1]->setMethod('testMethod2');
        $testBundleConfig->setCaches($caches);
        $events = $testBundleConfig->getEvents();
        $events[1]->setKey('core/object/updateModified');
        $testBundleConfig->setEvents($events);
        $this->getConfigurationOperator()->saveFileBased($testBundleConfig, 'objects');
        $xml = '<config>
  <bundle>
    <objects>
      <object id="TestChanged">
        <label>Test</label>
        <storageService>tests.store.core.test</storageService>
        <fields>
          <field id="id" type="number" primaryKey="true">
            <label>ID</label>
          </field>
          <field id="name" type="text">
            <label>Name</label>
          </field>
        </fields>
      </object>
    </objects>
  </bundle>
</config>';
        $this->assertEquals(static::$jarvesObjectsXml, $testBundleConfig->getPropertyFilePath('objects'));
        $this->assertStringEqualsFile($this->getRoot() . $testBundleConfig->getPropertyFilePath('objects'), $xml);
        $this->assertEquals(static::$jarvesXml, $testBundleConfig->getPropertyFilePath('caches'));
        $this->assertEquals(static::$jarvesXml, $testBundleConfig->getPropertyFilePath('events'));
        $this->getConfigurationOperator()->saveFileBased($testBundleConfig, 'caches');
        $xmlCaches = '<config>
  <bundle>
    <caches>
      <cache>core/contents</cache>
      <cache method="testMethod2">core/contents2</cache>
    </caches>
    <events>
      <event key="core/object/modify">
        <desc>Fires on every object modification (add/delete/update). Subject is the normalized object key.</desc>
      </event>
      <event key="core/object/update">
        <desc>Fires on every object update. Subject is the normalized object key.</desc>
      </event>
    </events>
    <listeners>
      <event key="core/object/modify" subject="core:domain">
        <clearCache>core/domains.created</clearCache>
        <clearCache>core/domains</clearCache>
      </event>
      <event key="core/object/modify" subject="core:content">
        <clearCache>core/contents</clearCache>
      </event>
      <event key="core/object/modify" subject="core:node">
        <clearCache>core/contents</clearCache>
      </event>
    </listeners>
  </bundle>
</config>';
        $this->assertStringEqualsFile($this->getRoot() . $testBundleConfig->getPropertyFilePath('caches'), $xmlCaches);
        $this->getConfigurationOperator()->saveFileBased($testBundleConfig, 'events');
        $xmlEvents = '<config>
  <bundle>
    <caches>
      <cache>core/contents</cache>
      <cache method="testMethod2">core/contents2</cache>
    </caches>
    <events>
      <event key="core/object/modify">
        <desc>Fires on every object modification (add/delete/update). Subject is the normalized object key.</desc>
      </event>
      <event key="core/object/updateModified">
        <desc>Fires on every object update. Subject is the normalized object key.</desc>
      </event>
    </events>
    <listeners>
      <event key="core/object/modify" subject="core:domain">
        <clearCache>core/domains.created</clearCache>
        <clearCache>core/domains</clearCache>
      </event>
      <event key="core/object/modify" subject="core:content">
        <clearCache>core/contents</clearCache>
      </event>
      <event key="core/object/modify" subject="core:node">
        <clearCache>core/contents</clearCache>
      </event>
    </listeners>
  </bundle>
</config>';
        $this->assertStringEqualsFile($this->getRoot() . $testBundleConfig->getPropertyFilePath('events'), $xmlEvents);
        $bundle = new TestsFileImportBundle();
        $configStrings = $configs->getXmlConfigsForBundle($bundle);
        $configObjects = $configs->parseConfig($configStrings);
        $testBundleConfig = $configObjects['testsfileimport'];
        $this->assertNotNull($testBundleConfig);
        $this->assertCount(1, $testBundleConfig->getObjects());
        $this->assertCount(2, $testBundleConfig->getCaches());
        $this->assertCount(2, $testBundleConfig->getEvents());
        $this->assertEquals('TestChanged', current($testBundleConfig->getObjects())->getId());
        $this->assertEquals('testMethod2', $testBundleConfig->getCaches()[1]->getMethod());
        $this->assertEquals('core/object/updateModified', $testBundleConfig->getEvents()[1]->getKey());
        unlink($this->getJarvesXmlFile());
        unlink($this->getJarvesObjectsXmlFile());
    }