Kaynağa Gözat

ZF-10568: apply patch adding support for JSON and YAML configuration to Zend_Application

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@23162 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 15 yıl önce
ebeveyn
işleme
f90899ee1e

+ 4 - 3
documentation/manual/en/module_specs/Zend_Application-QuickStart.xml

@@ -199,9 +199,10 @@ class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
         <para>
             Now, create your configuration. For this tutorial, we will use an
             <acronym>INI</acronym> style configuration; you may, of course, use an
-            <acronym>XML</acronym> or <acronym>PHP</acronym> configuration file as well. Create
-            the file <filename>application/configs/application.ini</filename>, and provide the
-            following contents:
+            <acronym>XML</acronym>, <acronym>JSON</acronym>, <acronym>YAML</acronym>, or
+            <acronym>PHP</acronym> configuration file as well. Create the file
+            <filename>application/configs/application.ini</filename>, and provide the following
+            contents:
         </para>
 
         <programlisting language="dosini"><![CDATA[

+ 8 - 0
library/Zend/Application.php

@@ -387,6 +387,14 @@ class Zend_Application
                 $config = new Zend_Config_Xml($file, $environment);
                 break;
 
+            case 'json':
+                $config = new Zend_Config_Json($file, $environment);
+                break;
+
+            case 'yaml':
+                $config = new Zend_Config_Yaml($file, $environment);
+                break;
+
             case 'php':
             case 'inc':
                 $config = include $file;

+ 20 - 2
tests/Zend/Application/ApplicationTest.php

@@ -289,6 +289,24 @@ class Zend_Application_ApplicationTest extends PHPUnit_Framework_TestCase
         $this->assertTrue($application->hasOption('foo'));
     }
 
+    /**
+     * @group ZF-10568
+     */
+    public function testPassingStringYamlConfigPathOptionToConstructorShouldLoadOptions()
+    {
+        $application = new Zend_Application('testing', dirname(__FILE__) . '/_files/appconfig.yaml');
+        $this->assertTrue($application->hasOption('foo'));
+    }
+
+    /**
+     * @group ZF-10568
+     */
+    public function testPassingStringJsonConfigPathOptionToConstructorShouldLoadOptions()
+    {
+        $application = new Zend_Application('testing', dirname(__FILE__) . '/_files/appconfig.json');
+        $this->assertTrue($application->hasOption('foo'));
+    }
+
     public function testPassingArrayOptionsWithConfigKeyShouldLoadOptions()
     {
         $application = new Zend_Application('testing', array('bar' => 'baz', 'config' => dirname(__FILE__) . '/_files/appconfig.inc'));
@@ -458,7 +476,7 @@ class Zend_Application_ApplicationTest extends PHPUnit_Framework_TestCase
         $this->assertEquals(1, $application->getBootstrap()->fooExecuted);
         $this->assertEquals(0, $application->getBootstrap()->barExecuted);
     }
-    
+
     public function testOptionsCanHandleMuiltipleConigFiles()
     {
         $application = new Zend_Application('testing', array(
@@ -468,7 +486,7 @@ class Zend_Application_ApplicationTest extends PHPUnit_Framework_TestCase
                 )
             )
         );
-        
+
         $this->assertEquals('baz', $application->getOption('foo'));
     }
 }

+ 8 - 0
tests/Zend/Application/_files/appconfig.json

@@ -0,0 +1,8 @@
+{
+    "production": {
+        "foo": "bar"
+    },
+    "testing": {
+        "_extends": "production"
+    }
+}

+ 7 - 0
tests/Zend/Application/_files/appconfig.yaml

@@ -0,0 +1,7 @@
+production:
+  foo: "bar"
+
+testing:
+  _extends: production
+  
+