-- Ben Scholzen 'DASPRiD' <[email protected]> wrote (on Tuesday, 24 March 2009, 12:12 PM +0100): > When creating your bootstrap file, the methods are actually executed in > the order they appear in the class. The same goes for the resources; > they are executed in the order they are added (FIFO).
Just a note on this... Internal initializers are executed first, and then plugin resources -- so if an internal initializer depends on a plugin resource, you'll still need to do the bootstrap() call(s). > ................................... > : ___ _ ___ ___ ___ _ ___ : > : | \ /_\ / __| _ \ _ (_) \ : > : | |) / _ \\__ \ _/ / | |) | : > : |___/_/:\_\___/_| |_|_\_|___/ : > :........:........................: > : Web : http://www.dasprids.de : > : E-mail : [email protected] : > : Jabber : [email protected] : > : ICQ : 105677955 : > :........:........................: > > > keith Pope schrieb: > > Hi Matthew, > > > > Your suggestions worked I have it working nicely now :) > > > > I would maybe suggest making this clear when the documentation is > > written, it was a little counter intuitive that the default module is > > handled differently to other modules. > > > > Also I still have some reservations about the control we have over the > > order in with bootstrap methods and resources are executed, its seems > > that you could end up using a lot of $this->bootstrap(''); calls > > within your bootstrap class/ resource classes. It may be a nice idea > > to also have a stack you could add to as well as standard way, so you > > can manage order in one place. > > > > One other thing to to get everything working I added this to my bootstrap > > class: > > > > class Bootstrap extends Zend_Application_Bootstrap_Base > > .... > > protected function _initDefaultAutoloader() > > { > > if (null === $this->_resourceLoader) { > > $this->_resourceLoader = new > > Zend_Application_Module_Autoloader(array( > > 'namespace' => 'Storefront', > > 'basePath' => APPLICATION_PATH . '/modules/storefront', > > )); > > $this->_resourceLoader > > ->addResourceType( > > 'modelResource', > > 'models/resources', > > 'Resource' > > ); > > $this->_resourceLoader > > ->addResourceType( > > 'service', > > 'services', > > 'Service' > > ); > > } > > return $this->_resourceLoader; > > } > > > > Is there a better way of doing this, I see that the > > Zend_Application_Module_Bootstrap already has the resource loader > > functionality, would it work if I extend from that instead of > > Zend_Application_Bootstrap_Base? > > > > Thx again, hope the feedback is of some use. > > > > Keith > > > > 2009/3/23 keith Pope <[email protected]>: > >> Thx for the tips Matthew :) > >> > >> I think my examples were a little confusing, I have been hacking about > >> all day trying to figure out my looping problem :) > >> > >> For my storefront app I use one module currently storefront which I > >> set as the default module, this was so I can have everything > >> namespaced nicely. I will try adding the resource autoloaders in the > >> bootstrap and see how that goes, though I did get the same loop error > >> when using more than one module. > >> > >> I will report back if I continue to have problems :) I know the > >> component is still being worked on, just trying to get my head around > >> the process so I can add it to the book chapters I am currently > >> working on. > >> > >> Thanks again for the help > >> > >> > >> 2009/3/23 Matthew Weier O'Phinney <[email protected]>: > >>> -- keith Pope <[email protected]> wrote > >>> (on Monday, 23 March 2009, 03:26 PM +0000): > >>>> I have been trying out Zend_App again as it seems to be moving on a > >>>> bit now, I am having some problems using modules, I keep getting: > >>>> > >>>> Maximum function nesting level of '100' reached, aborting! in > >>>> /home/keith/www/ZApp/library/Zend/Loader/PluginLoader.php on line 125 > >>>> > >>>> I have been trying to track down whats causing this for a while but > >>>> with no success, it seems to be when the modules bootstrap is called > >>>> it recalls everything??? > >>>> > >>>> Also I was wondering why the modules resource skips the default > >>>> module, how do you say add autoloader paths to the default module? > >>> Typically, the bootstrap you attach to Zend_Application will be the one > >>> from your default module -- which is why we skip it. I need to change > >>> the functionality slightly to get the default module name from the front > >>> controller, but this will be the basic functionality. > >>> > >>> If you want to add autoloader paths to the default module, you should > >>> create a bootstrap resource or initializer method for doing so. I have > >>> not done this at this time because, by convention currently, the default > >>> module has no namespace prefix, making it a bit more troublesome to > >>> setup resource autoloading in a way that people will be able to drop in > >>> to existing applications. > >>> > >>> As to your questions here... Does the bootstrap in APPLICATION_PATH . > >>> '/bootstrap/Bootstrap.php' contain a class named 'Bootstrap'? or does it > >>> contain the class 'Storefront_Bootstrap' which you reference below? If > >>> the latter, you need to modify how you pass the bootstrap argument to > >>> Zend_Application: > >>> > >>> 'bootstrap' => array( > >>> 'path' => APPLICATION_PATH . '/bootstrap/Bootstrap.php', > >>> 'class' => 'Storefront_Bootstrap', > >>> ), > >>> > >>> As for your other error: > >>> > >>> Maximum function nesting level of '100' reached, aborting! in > >>> /home/keith/www/ZApp/library/Zend/Loader/PluginLoader.php on line 125 > >>> > >>> This sounds like you're somehow specifying an object as the prefix to > >>> pass to the plugin loader. I haven't been able to reproduce the issue > >>> locally. > >>> > >>> A couple more comments below... > >>> > >>>> I am using the structure: > >>>> > >>>> modules > >>>> module1 > >>>> module2 > >>>> > >>>> And my app setup: > >>>> > >>>> <?php > >>>> $paths = array( > >>>> get_include_path(), > >>>> '../library/Incu', > >>>> '../library', > >>>> ); > >>>> set_include_path(join(PATH_SEPARATOR, $paths)); > >>> Use implode() instead of join(). It's faster. > >>> > >>>> defined('APPLICATION_PATH') > >>>> or define('APPLICATION_PATH', realpath(dirname(__FILE__) . > >>>> '/../application')); > >>>> defined('APPLICATION_ENV') > >>>> or define('APPLICATION_ENV', 'development'); > >>>> > >>>> require_once 'Zend/Application.php'; > >>>> > >>>> $application = new Zend_Application(APPLICATION_ENV, array( > >>>> 'bootstrap' => APPLICATION_PATH . '/bootstrap/Bootstrap.php', > >>>> 'autoloadernamespaces' => array('Zend', 'SF'), > >>> > >>> BTW, you'll want to append the above with '_': array('Zend_', 'SF_'). > >>> This is so that the Autoloader can be used with libraries that do not > >>> use a separator in their class names. > >>> > >>> > >>>> 'resources' => array( > >>>> 'frontcontroller' => array( > >>>> 'moduledirectory' => APPLICATION_PATH . '/modules', > >>>> 'defaultmodule' => 'default', > >>> This latter setting isn't really necessary; that's the default value > >>> anyways. > >>> > >>>> ), > >>>> 'modules' => array(), > >>>> ), > >>>> 'phpsettings' => array( > >>>> 'display_errors' => true, > >>>> 'error_reporting' => E_ALL|E_STRICT, > >>>> 'date.timezone' => 'Europe/London', > >>>> ) > >>>> ) > >>>> ); > >>>> $application->bootstrap(); > >>>> $application->run(); > >>>> > >>>> unset($application); > >>> This unset() call isn't really necessary, either -- nothing else is > >>> happening after this. > >>> > >>> > >>>> module bootstrap: > >>>> > >>>> class Storefront_Bootstrap extends Zend_Application_Module_Bootstrap > >>>> { > >>>> public function _initModule() > >>>> { > >>>> $this->getResourceLoader() > >>>> ->addResourceType( > >>>> 'modelResource', > >>>> 'models/resources', > >>>> 'Resource' > >>>> ); > >>>> $this->getResourceLoader() > >>>> ->addResourceType( > >>>> 'service', > >>>> 'services', > >>>> 'Service' > >>>> ); > >>>> } > >>>> > >>>> public function run(){} > >>>> } > >>> -- > >>> Matthew Weier O'Phinney > >>> Software Architect | [email protected] > >>> Zend Framework | http://framework.zend.com/ > >>> > >> > >> > >> -- > >> ---------------------------------------------------------------------- > >> [MuTe] > >> ---------------------------------------------------------------------- > >> > > > > > > > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.9 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iEYEARECAAYFAknIwBEACgkQ0HfT5Ws789B7wgCgkPeXZlEf4zHU2LEVio/VwdS0 > 4cEAoNDMhKa5J7yJyArLXeTmlZpbEK77 > =xRUD > -----END PGP SIGNATURE----- > -- Matthew Weier O'Phinney Software Architect | [email protected] Zend Framework | http://framework.zend.com/
