-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
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).
...................................
: ___ _ ___ ___ ___ _ ___ :
: | \ /_\ / __| _ \ _ (_) \ :
: | |) / _ \\__ \ _/ / | |) | :
: |___/_/:\_\___/_| |_|_\_|___/ :
:........:........................:
: 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-----