Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can someone explain Kohana 3's routing system?

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?

like image 961
alex Avatar asked Jan 19 '10 02:01

alex


3 Answers

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.

like image 30
ColinM Avatar answered Oct 02 '22 09:10

ColinM


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

'products/(type)' should be 'products/(<type>)'
like image 29
loonies Avatar answered Oct 02 '22 09:10

loonies


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.

like image 60
Lukman Avatar answered Oct 02 '22 08:10

Lukman