所以我試圖安裝並運行Kohana。一般來說,我對它和框架都很陌生(儘管我已經使用了一些CakePHP)。Kohana:未找到請求的URL
反正...在我的引導文件我有這樣的:
// 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]又名$控制器等於到我的一個頁面「類別」(對應我的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,則會看到「categories」被設置爲控制器。
這裏是我的實際路由方法的代碼...
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,
));
不幸的是,我不知道它的路由來。正如我所提到的$控制器返回以前的類別是正確的,但我收到錯誤消息「HTTP_Exception_404 [404]:請求的URL $參數[0](電影或遊戲等)沒有在此服務器上找到。
請記住,如果它與某個類別匹配,我沒有$ param [0]的控制器類,因爲我想使用「categories」控制器類。如果我轉到domain.com/kohana/categories,它可以正常工作。
任何人有任何想法/知道解決方法?
加#1
我想通了,即使類別控制器被調用,正確的動作被調用,它仍然需要「顯示」控制器來顯示。我添加了一個帶有非常基本信息(模板,內容等)的演示控制器,並且顯示正確。在路由類中是否有解決方案來使指定控制器顯示?就像我說的那樣,我告訴它要去哪個控制器,它承認它,但實際上並沒有實現它。
我很抱歉地說這個,但我認爲你完全不在你的引導中的代碼。你使用框架的原因不必這樣做。你可以在你的動作中用'$ this-> request-> param()'得到所有的路段(或參數)。 http://kohanaframework.org/3。2/guide/kohana/routing#request-parameters 對於您的路由實際問題,請閱讀文檔以及Lethargy的答案。您可以在URI中指定一條不含''的路由,並在defaults()中設置一個默認控制器。 –