소스 검색

ZF-8496: add module autoloader to application bootstrap

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@19527 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 16 년 전
부모
커밋
a1ae31ff80

+ 72 - 0
library/Zend/Application/Bootstrap/Bootstrap.php

@@ -36,6 +36,18 @@ class Zend_Application_Bootstrap_Bootstrap
     extends Zend_Application_Bootstrap_BootstrapAbstract
 {
     /**
+     * Default application resource namespace
+     * @var string
+     */
+    protected $_defaultAppNamespace = 'Application';
+
+    /**
+     * Application resource autoloader
+     * @var Zend_Loader_Autoloader_Resource
+     */
+    protected $_resourceLoader;
+
+    /**
      * Constructor
      *
      * Ensure FrontController resource is registered
@@ -46,6 +58,14 @@ class Zend_Application_Bootstrap_Bootstrap
     public function __construct($application)
     {
         parent::__construct($application);
+
+        if ($application->hasOption('resourceloader')) {
+            $this->setOptions(array(
+                'resourceloader' => $application->getOption('resourceloader')
+            ));
+        }
+        $this->getResourceLoader();
+
         if (!$this->hasPluginResource('FrontController')) {
             $this->registerPluginResource('FrontController');
         }
@@ -76,4 +96,56 @@ class Zend_Application_Bootstrap_Bootstrap
         $front->setParam('bootstrap', $this);
         $front->dispatch();
     }
+
+    /**
+     * Set module resource loader
+     *
+     * @param  Zend_Loader_Autoloader_Resource $loader
+     * @return Zend_Application_Module_Bootstrap
+     */
+    public function setResourceLoader(Zend_Loader_Autoloader_Resource $loader)
+    {
+        $this->_resourceLoader = $loader;
+        return $this;
+    }
+
+    /**
+     * Retrieve module resource loader
+     *
+     * @return Zend_Loader_Autoloader_Resource
+     */
+    public function getResourceLoader()
+    {
+        if (null === $this->_resourceLoader) {
+            $r    = new ReflectionClass($this);
+            $path = $r->getFileName();
+            $this->setResourceLoader(new Zend_Application_Module_Autoloader(array(
+                'namespace' => $this->getDefaultAppNamespace(),
+                'basePath'  => dirname($path),
+            )));
+        }
+        return $this->_resourceLoader;
+    }
+
+    /**
+     * Get defaultAppNamespace
+     *
+     * @return string
+     */
+    public function getDefaultAppNamespace()
+    {
+        return $this->_defaultAppNamespace;
+    }
+
+    /**
+     * Set defaultAppNamespace
+     *
+     * @param  string
+     * @return Zend_Application_Bootstrap_Bootstrap
+     */
+    public function setDefaultAppNamespace($value)
+    {
+        $this->_defaultAppNamespace = (string) $value;
+        return $this;
+    }
 }

+ 14 - 30
library/Zend/Application/Module/Bootstrap.php

@@ -40,9 +40,10 @@ abstract class Zend_Application_Module_Bootstrap
     extends Zend_Application_Bootstrap_Bootstrap
 {
     /**
-     * @var Zend_Loader_Autoloader_Resource
+     * Set this explicitly to reduce impact of determining module name
+     * @var string
      */
-    protected $_resourceLoader;
+    protected $_moduleName;
 
     /**
      * Constructor
@@ -84,43 +85,26 @@ abstract class Zend_Application_Module_Bootstrap
     }
 
     /**
-     * Set module resource loader
-     *
-     * @param  Zend_Loader_Autoloader_Resource $loader
-     * @return Zend_Application_Module_Bootstrap
-     */
-    public function setResourceLoader(Zend_Loader_Autoloader_Resource $loader)
-    {
-        $this->_resourceLoader = $loader;
-        return $this;
-    }
-
-    /**
-     * Retrieve module resource loader
+     * Ensure resource loader is loaded
      *
-     * @return Zend_Loader_Autoloader_Resource
+     * @return void
      */
-    public function getResourceLoader()
+    public function initResourceLoader()
     {
-        if (null === $this->_resourceLoader) {
-            $r    = new ReflectionClass($this);
-            $path = $r->getFileName();
-            $this->setResourceLoader(new Zend_Application_Module_Autoloader(array(
-                'namespace' => $this->getModuleName(),
-                'basePath'  => dirname($path),
-            )));
-        }
-        return $this->_resourceLoader;
+        $this->getResourceLoader();
     }
 
     /**
-     * Ensure resource loader is loaded
+     * Get default application namespace
      *
-     * @return void
+     * Proxies to {@link getModuleName()}, and returns the current module 
+     * name
+     * 
+     * @return string
      */
-    public function initResourceLoader()
+    public function getDefaultAppNamespace()
     {
-        $this->getResourceLoader();
+        return $this->getModuleName();
     }
 
     /**

+ 32 - 0
tests/Zend/Application/Bootstrap/BootstrapTest.php

@@ -128,6 +128,38 @@ class Zend_Application_Bootstrap_BootstrapTest extends PHPUnit_Framework_TestCas
 
         $this->assertTrue($this->bootstrap->getContainer()->zfappbootstrap);
     }
+
+    /**
+     * @group ZF-8496
+     */
+    public function testBootstrapShouldInitializeModuleAutoloader()
+    {
+        $this->assertTrue($this->bootstrap->getResourceLoader() instanceof Zend_Application_Module_Autoloader);
+    }
+
+    /**
+     * @group ZF-8496
+     */
+    public function testBootstrapAutoloaderShouldHaveApplicationNamespaceByDefault()
+    {
+        $al = $this->bootstrap->getResourceLoader();
+        $this->assertEquals('Application', $al->getNamespace());
+    }
+
+    /**
+     * @group ZF-8496
+     */
+    public function testBootstrapAutoloaderNamespaceShouldBeConfigurable()
+    {
+        $application = new Zend_Application('testing', array(
+            'defaultappnamespace' => 'Default',
+        ));
+        $bootstrap   = new Zend_Application_Bootstrap_Bootstrap(
+            $application
+        );
+        $al = $bootstrap->getResourceLoader();
+        $this->assertEquals('Default', $al->getNamespace());
+    }
 }
 
 if (PHPUnit_MAIN_METHOD == 'Zend_Application_Bootstrap_BootstrapTest::main') {

+ 1 - 1
tests/Zend/Application/Resource/AllTests.php

@@ -71,7 +71,7 @@ class Zend_Application_Resource_AllTests
         $suite->addTestSuite('Zend_Application_Resource_NavigationTest');
         $suite->addTestSuite('Zend_Application_Resource_SessionTest');
         $suite->addTestSuite('Zend_Application_Resource_ViewTest');
-        $suite->addTestSuite('Zend_Application_Resource_MonitorTest');
+        $suite->addTestSuite('Zend_Application_Resource_ZendmonitorTest');
 
         return $suite;
     }