Hello :]

Having the same problems described in this topic, was struggling with the
module-specific bootstrap described in the manual - after digging in the
source code, realized it's not module specific; if i define a resource
(layout, db, etc..) for a module as:

my_module.resources.layout.layoutPath = APPLICATION_PATH
"/modules/my_module/layouts/scripts"
my_module.resources.layout.contentKey = "content"

it's set for all available modules.

In addition the suggestions presented here won't fix the situation, as both
examples assume that Zend_Application_Resource_Modules is bootstrapped,
which actually makes all "module-specific" resources to be
bootstrapped (see Zend_Application_Resource_Modules::init()), prior to any
Controller Plugin is run, thus, whatever is done in the Controller Plugin
for some specific module, the others will already be affected.

I understand that bootstrap is done before routing which leads to this
situation, but then it should either be defined exactly what
Zend_Application_Resource_Modules resource is implemented for, or design
some common solution for this.

I'm using Zend Framework 1.8.2 Release (r15776). Released on May 27, 2009.

Would be good if the manual misleading page is also modified:
http://zendframework.com/manual/en/zend.application.available-resources.html#zend.application.available-resources.modules

Gracias :]
Felix


Mon Zafra wrote:
> 
> What you basically need is to defer the setting of layout until
> routeShutdown. This can be done with a controller plugin. Matthew's
> suggestion [
> http://framework.zend.com/issues/browse/ZF-6568?focusedCommentId=30741#action_30741]
> is to have your module bootstrap register a plugin which implements
> routeShutdown() or dispatchLoopStartup(). The plugin method checks the
> current module, then do stuff if it matches with the calling bootstrap
> module.
> 
> Personally, I don't like this method because it could lead to lots of
> unused
> plugins. I prefer to have only one plugin that pulls the current module
> from
> the request, pulls its bootstrap from the modules resource and executes a
> specific method.
> 
> class Mz_Plugin_ModuleLazyInit extends Zend_Controller_Plugin_Abstract
> {
>     protected $_bootstraps;
> 
>     public function __construct($bootstraps)
>     {
>         $this->_bootstraps = $bootstraps;
>     }
> 
>     public function routeShutdown(Zend_Controller_Request_Abstract
> $request)
>     {
>         $module = $request->getModuleName();
>         if (isset($this->_bootstraps[$module])) {
>             $bootstrap = $this->_bootstraps[$module];
>             if (method_exists($bootstrap, 'lazyInit')) {
>                 $bootstrap->lazyInit();
>             }
>         }
>     }
> }
> 
> // application bootstrap
>     protected function _initPlugins()
>     {
>         if ($this->hasPluginResource('modules')) {
>             $this->bootstrap('modules');
>             $this->bootstrap('frontController');
>             $bootstraps = $this->getResource('modules');
>             $front = $this->getResource('frontController');
> 
>             $plugin = new Mz_Plugin_ModuleLazyInit($bootstraps);
>             $front->registerPlugin($plugin);
>         }
>     }
> 
> // module bootstrap
>     public function lazyInit()
>     {
>         $appBootstrap = $this->getApplication();
>         $appBootstrap->bootstrap('layout');
>         $layout = $appBootstrap->getResource('layout');
>         $layout->setLayoutPath(dirname(__FILE__) . '/layouts');
>     }
> 
> 
> 
>    -- Mon
> 
> 
> On Fri, May 8, 2009 at 8:25 AM, Karl <[email protected]> wrote:
> 
>>  I still have the same problem and have not been able to get different
>> layouts to work when using modules. Can this actually be achieved or are
>> we
>> all trying something that has not been implemented ?
>>
>> Regards,
>> Karl
>>
>>  ------------------------------
>> *From:* Sergio Rinaudo [mailto:[email protected]]
>> *Sent:* 07 May 2009 10:50 PM
>> *To:* [email protected]; [email protected]
>> *Subject:* RE: [fw-general] ZF1.8 Switching layouts between modules.
>>
>> Hi matthew,
>> I added the line you said, and the layout is switched, but unfortunatelly
>> for all modules, so also the default module is rendered with the admin
>> layout. Any advice?
>>
>> Sergio Rinaudo
>>
>>
>>
>>
>> > Date: Thu, 7 May 2009 16:18:44 -0400
>> > From: [email protected]
>> > To: [email protected]
>> > Subject: Re: [fw-general] ZF1.8 Switching layouts between modules.
>> >
>> > -- Sergio Rinaudo <[email protected]> wrote
>> > (on Thursday, 07 May 2009, 08:54 PM +0200):
>> > > I've almost completed to implement all my past work in the new
>> > > Zend_Application, I still have the problem on how switch layouts
>> between
>> > > modules. I noticed here you can specify this in the configuration ini
>> file:
>> > >
>> > >
>> http://framework.zend.com/manual/en/zend.application.available-resources.html#
>> > > zend.application.available-resources.modules.configExample
>> > >
>> > > but if I add this line on my ini
>> > >
>> > > admin.resources.layout.layout = "admin"
>> > >
>> > > I get the error
>> > >
>> > > Fatal error: Uncaught exception
>> 'Zend_Application_Bootstrap_Exception'
>> with
>> > > message 'Resource matching "frontcontroller" not found' in
>> >
>> > I know what's happening here.
>> >
>> > The layout resource has this:
>> >
>> > $this->getBootstrap()->bootstrap('FrontController');
>> >
>> > The problem is that your _module_ bootstrap doesn't have the resources
>> > that the _application_ bootstrap had -- and so it's finding no matching
>> > resource to bootstrap.
>> >
>> > One workaround is to add this to your configuration:
>> >
>> > admin.resources.frontController[] =
>> >
>> > This will grab and return the front controller singleton, which should
>> > work for these purposes.
>> >
>> > --
>> > Matthew Weier O'Phinney
>> > Project Lead | [email protected]
>> > Zend Framework | http://framework.zend.com/
>>
>> ------------------------------
>> Cerchi i tuoi spazi? Hotmail va oltre i 5GB. Scopri
>> perché!<http://messenger.it/hotmail.aspx>
>>
> 
> 

-- 
View this message in context: 
http://www.nabble.com/ZF1.8-Switching-layouts-between-modules.-tp23433040p24305394.html
Sent from the Zend Framework mailing list archive at Nabble.com.

Reply via email to