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]
> ----------------------------------------------------------------------
>



-- 
----------------------------------------------------------------------
[MuTe]
----------------------------------------------------------------------

Reply via email to