Php 有人能解释一下Kohana 3';什么是路由系统?

Php 有人能解释一下Kohana 3';什么是路由系统?,php,model-view-controller,routing,kohana,Php,Model View Controller,Routing,Kohana,在设置路由的bootstrap.php中,我很难让它们正常工作。不久前我读了一些文档,但似乎再也找不到解释这些文档的方法了。这里是我的一个例子 Route::set('products', 'products/(type)', array('type' => '.+')) ->defaults(array( 'controller' => 'articles', 'action' => 'view_product', 'page' =>

在设置路由的
bootstrap.php
中,我很难让它们正常工作。不久前我读了一些文档,但似乎再也找不到解释这些文档的方法了。这里是我的一个例子

Route::set('products', 'products/(type)', array('type' => '.+'))
    ->defaults(array(
    'controller' => 'articles',
    'action' => 'view_product',
    'page' => 'shock-absorbers',
    ));
我认为这意味着像
products/something
这样的请求将加载
文章
控制器,以及
操作视图\u product()
方法。但我不能让它工作

有人能给我解释一下它们是如何工作的,以及所有的方法参数是什么吗

我想那意味着一个请求 类似产品/东西会被装载起来 物品控制器,以及 操作视图产品控制器。但我 不能让它工作

你把粗体部分弄错了。它将实际加载articles controller的action\u view\u product方法

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

哦,我的天啊,你的天啊,为什么我没有注意到


实际问题在于您的路线模式!它应该是带有尖括号的
产品/()
。这些将提示Kohana,您希望“type”是一个参数名,而不是一个文本。

uff,对不起,lower-then和greater-then符号不能正确显示

'products/(type)' should be 'products/(<type>)'
“产品/(类型)”应为“产品/()”

括号表示可选部分(如果缺少,正则表达式将匹配)。这些变量可以是静态的和/或包含命名变量。尖括号表示路线中的命名变量,可通过以下方式在控制器中访问:

$this->request->param('type');
我写了官方的路线指南,你可以阅读,它应该能回答你所有的问题。

记录如下:

目录、控制器和操作可以作为公共属性从请求中访问,如下所示:


资料来源:

对不起,那是个打字错误!我仍然无法让它为我工作。是的,我有一个默认路由,它捕获了所有(并且正常工作)您在默认路由之前声明了这个自定义路由吗?因为路由将匹配它遇到的第一个路由,并且由于默认路由将匹配“products/something”,它将采用该路由。或者更好:
“product(/)”
,因为否则将不匹配“product”(不带斜杠)(尽管您可能希望这样)
// 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;