【发布时间】:2012-01-25 18:17:38
【问题描述】:
所以我正在尝试安装和运行 Kohana。我对它和一般框架都很陌生(虽然我用过一点 CakePHP)。
无论如何...在我的引导文件中我有这个:
// GET PARAMS -- This basically splits domain.com/kohana/controller/action/param1/etc
// into: controller | action | param1 | etc
$requestURI = explode('/', $_SERVER['REQUEST_URI']);
$scriptName = explode('/',$_SERVER['SCRIPT_NAME']);
for($i= 0;$i < sizeof($scriptName);$i++){
if ($requestURI[$i] == $scriptName[$i]){
unset($requestURI[$i]);
}
}
$param = array_values($requestURI);
$controller = @ $param[0];
$action = @ $param[1];
$param1 = @ $param[2];
$param2 = @ $param[3];
$param3 = @ $param[4];
$param4 = @ $param[5];
$param5 = @ $param[6];
$param6 = @ $param[7];
现在,我想连接到我的数据库并基本上查看第一个参数(又名 $param[0] 又名 $controller)是否等于我的一个页面“类别”(对应于我的 categories_pages 表)。如果它是一个类别,那么我想使用默认的“类别”控制器,否则,控制器应该是任何 $param[0] 。这意味着如果我访问 domain.com/kohana/movies 或 domain.com/kohana/games,它将显示类别控制器,否则 domain.com/kohana/users 将显示用户控制器。
$db = Database::instance();
$getiscategory = DB::select('*')->from('categories_pages')->where('directory', '=', $controller)->execute();
$is_category = $getiscategory->count();
if($is_category){
$controller = "categories";
}
$controller = (empty($controller)) ? 'index' : $controller;
$action = (empty($action)) ? 'index' : $action;
我想完成上述工作。如果我回显 $is_category,我看到当有类别匹配时返回值 1,如果我回显 $controller,我看到“类别”设置为控制器。
这是我的实际路由方法的代码...
Route::set(
'custom',
'(<controller>(/<action>(/<param1>)(/<param2>(/<param3>(/<param4>(/<param5>(/<param6>)))))))'
)->defaults(array(
'controller' => $controller,
'action' => $action,
'param1' => $param1,
'param2' => $param2,
'param3' => $param3,
'param4' => $param4,
'param5' => $param5,
'param6' => $param6,
));
很遗憾,我不确定它要路由到哪里。正如我提到的,$controller 之前作为正确的类别返回,但我收到错误消息“HTTP_Exception_404 [404]: The Requested URL $param[0] (movies or games, etc) is not found on this server.”
请记住,如果 $param[0] 与类别匹配,我没有控制器类,因为我想使用“类别”控制器类。如果我去 domain.com/kohana/categories 它工作正常。
任何人有任何想法/知道解决方法吗?
补充 #1
我发现即使调用了类别控制器并调用了正确的操作,它仍然需要“显示”控制器来显示。我添加了一个带有非常基本信息(模板、内容等)的显示控制器,它显示正确。路由类中是否有解决方法来使指定的控制器显示?就像我说的那样,我告诉它要去哪个控制器,它会承认它,但实际上并没有去它。
【问题讨论】:
-
很抱歉这么说,但我认为您完全不使用引导程序中的代码。你使用框架的原因不是必须做这样的事情。您可以在操作中使用
$this->request->param()获取所有路线段(或参数)。 kohanaframework.org/3.2/guide/kohana/routing#request-parameters 对于路由的实际问题,请阅读更多文档和 Lethargy 的答案。您可以在 URI 中指定不带<controller>的路由,并在defaults()中设置默认控制器。
标签: php routing kohana kohana-3