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