views:

1087

answers:

3

I am using the mod-rewrite router.

I am trying to add a Route to the router that will convert the following url:
baseurl/category/aaa/mycontroller/myaction/param/value

to be:
Controller=mycontroller
action=myaction

--parameters--

category=aaa
param=value

I am using the following (not working) in my bootstrap, _front is the frontController

$Router=$this->_front->getRouter();
$CategoryRoute = new Zend_Controller_Router_Route('category/:category/:controller/:action/*');
$Router->addRoute('category', $CategoryRoute);

The error I get is a thrown router exception when I am using the Zend_View::url() helper (with or without giving it the name of the new route).
The exception is thrown only when I have baseurl/category/....

What am I missing?

What I missed:
Since there was [category] in the url, The router that was used is the one defined above.
When I used the url() helper, I didn't give any value in it to the [category] hence there was no value for this key in the url parts->failure. Giving a default, makes it work.

+1  A: 
$Router=$this->_front->getRouter();
$CategoryRoute = new Zend_Controller_Router_Route('category/:category/:controller/:action/*');
$Router->addRoute('category', $CategoryRoute);

Try adding a start to specify the existence of extra params

solomongaby
I get a Zend_Controller_Router_Exception thrown when I try to use the url() helper.
Itay Moav
Tried sending the name of the router, no change: $this->url(array('controller'=>'test'),'category',true);
Itay Moav
can you tell me the exception ?
solomongaby
+4  A: 

You should include the /* as suggested by solomongaby.

If not supplying all of the required parameters (i.e. category, controller and action), you will need to specify defaults.

You can do so as follows:

$Router=$this->_front->getRouter();

$CategoryRoute = new Zend_Controller_Router_Route('category/:category/:controller/:action/*',
    array(
        'controller' => 'index',
        'action'     => 'index',
        'category'   => null
    )
);
$Router->addRoute('category', $CategoryRoute);
David Caunt
A: 

You have to specify the defaults when creating the route (see dcaunt's post) OR specify all of the parameters in url view helper (category, controler and action)

Tomáš Fejfar