开发者

Can someone explain Kohana 3's routing system?

开发者 https://www.devze.com 2022-12-17 06:58 出处:网络
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 examp

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',
   开发者_Go百科 ));

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?


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.


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.


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

'products/(type)' should be 'products/(<type>)'


For the record:

The directory, controller and action can be accessed from the Request as public properties like so:

// From within a controller:
$this->request->action;
$this->request->controller;
$this->request->directory;

// Can be used anywhere:
Request::instance()->action;
Request::instance()->controller;
Request::instance()->directory;

source: http://kohanaframework.org/3.0/guide/kohana/routing#request-parameters

0

精彩评论

暂无评论...
验证码 换一张
取 消