-- Waigani <[EMAIL PROTECTED]> wrote
(on Wednesday, 03 October 2007, 01:11 AM -0700):
> I'm still struggling with the router. Here is the idea. On any page you type
> /_preview after the uri to see the cms preview of that page. Here is the
> code:
> 
> $ctrl = Zend_Controller_Front::getInstance();
>        $router = $ctrl->getRouter();
>               $router->addRoute('cms', new 
> Zend_Controller_Router_Route('*/:_preview',

I can tell you already that the above won't work; wildcards in routes
are greedy, meaning they eat everything remaining in the URL.

>               array('cmsPreview' => 'true')));
> 
> I've put this in a routeStartup plugin.
> 
> This works fine EXCEPT, the cms uses the default module, controller and
> action params which have been wiped by the new router. I see that the
> default router users Zend_Controller_Router_Route_Module. Is there a way to
> tack on the above logic (*/:_preview = 'cmsPreview' => 'true') to the
> default router? The main thing is keeping the default params (which is the
> same problem as in my earlier posts).

You have two options:

  * Simplest:  Just use a $_GET param for this:

        http://example/foo/bar?cmsPreview=1

  * Harder: In a routeStartup() plugin, grab the PATH_INFO from the
    request object, and check for '_preview' being the last portion of
    the path. If so, set the cmsPreview parameter in the request object,
    and strip that out of the PATH_INFO:

        $request = $this->getRequest();
        $path    = $request->getPathInfo();
        if ('_preview' == substr($path, -8)) {
            $request->setParam('cmsPreview', true);
            $path = substr($path, 0, strlen($path) - 9);
            $request->setPathInfo($path);
        }

> Waigani wrote:
> > 
> > It is for a login form which logs you into the current page. So I'm
> > actually after module, controller action names. I'll just do it as a
> > plugin.
> > 
> > 
> > 
> > Leo Büttiker wrote:
> >> 
> >> Ohh, I'm sorry I didn't read the hole thread. For getModuleName you have
> >> to
> >> probably do it in a plugin in the routeShutdown() methode. But why do you
> >> need the modulname there? You can access to it in the controller anyway.
> >> 
> >> -----Ursprüngliche Nachricht-----
> >> Von: Waigani [mailto:[EMAIL PROTECTED] 
> >> Gesendet: Montag, 1. Oktober 2007 11:04
> >> An: [email protected]
> >> Betreff: Re: [fw-general] AW: getRequest
> >> 
> >> 
> >> So how do you do it in the bootstrap? I'm guessing you getModuleName
> >> after
> >> $front->dispatch()?
> >> 
> >> 
> >> 
> >> 
> > 
> > 
> 
> -- 
> View this message in context: 
> http://www.nabble.com/getRequest-tf4531440s16154.html#a13014626
> Sent from the Zend Framework mailing list archive at Nabble.com.
> 

-- 
Matthew Weier O'Phinney
PHP Developer            | [EMAIL PROTECTED]
Zend - The PHP Company   | http://www.zend.com/

Reply via email to