views:

819

answers:

3

In bootstrap.php, where you set routes, I'm having a hard time getting them to work. I read some documentation a while ago that I can't seem to find again that explains them. Here is one of my examples

Route::set('products', 'products/(type)', array('type' => '.+'))
    ->defaults(array(
    'controller' => 'articles',
    'action' => 'view_product',
    'page' => 'shock-absorbers',
    ));

I thought that would mean a request like products/something would load up the articles controller, and the action_view_product() method. But I can't get it to work.

Can someone please explain to me exactly how they work, and what all the method parameters are?

+2  A: 

I thought that would mean a request like products/something would load up the articles controller, and the action_view_product controller. But I can't get it to work.

You got the bolded part wrong. It will actually load action_view_product method of the articles controller:

class Controller_Articles extends Controller {
   public function action_view_product() {
       $params = $this->request->param(); 
       // if the uri is `products/something' then $params['type'] == 'something'
   }
}

EDIT:

Oh my god oh your god why didn't I notice!!!

The actual problem lies within your route pattern! It should have been products/(<type>), with the angle brackets. Those will hint Kohana that you intended the 'type' to be a parameter name, instead of a literal.

Lukman
Sorry, that was a typo! I still can't seem to get it to work for me.
alex
did you put your controller php file in the correct folder?
Lukman
Yes, I have a default route that is capturing all (and working alright)
alex
did you declare this custom route before the default route? because the routing will match the first route it encounters, and since the default route will match 'products/something', it will take that route.
Lukman
+2  A: 

uff, sorry, lower then and greater then signs doesn't shows correctly

'products/(type)' should be 'products/(<type>)'
loonies
+2  A: 

The parentheses indicate optional parts (the regex will match if they are missing). These can be static and/or contain named variables. The angle brackets indicate a named variable in the route which is accessible in the controller via:

$this->request->param('type');

I wrote the official routing guide which you can read here, it should answer all of your questions.

ColinM