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;