2012-01-25 3 views
2

그래서 설치하고 Kohana를 실행하려고합니다. 나는 CakePHP를 조금 사용해 왔지만 일반적으로 프레임 워크와 새로운 것에 익숙하다. 첫 번째 PARAM 일명 $의 PARAM [0] 일명 $ 컨트롤러가 동일한 경우 내 데이터베이스에 연결하고 기본적으로보고 싶어 지금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]; 

:

은 어쨌든 ... 내 부트 스트랩 파일에 나는이 있습니다 나의 페이지 "카테고리"중 하나 (내 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를 echo하면 "범주"가 컨트롤러로 설정되어있는 것을 볼 수 있습니다.

여기에 나는 그것이 라우팅 어디에 확실하지 않다, ... 불행하게도

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] : 요청 된 $ param [0] (영화 또는 게임 등) 오류 메시지가이 서버에서 발견되지 않았습니다."라는 오류 메시지가 나타납니다.

"categories"컨트롤러 클래스를 사용하기 때문에 범주와 일치하는 $ param [0]에 대한 컨트롤러 클래스가 없습니다. domain.com/kohana/categories로 가면 잘 작동합니다.

누구나 아이디어가 있거나 해결 방법을 알고 있습니까?

추가 # 1 내가 범주 컨트롤러를 호출하고 올바른 행동이라고하더라도, 그것은 여전히 ​​표시 "쇼"컨트롤러를 필요로하는 것을 파악

. 나는 아주 기본적인 정보 (템플리트, 컨텐트 등)를 가진 쇼 컨트롤러를 추가하고 올바르게 보여 주었다. 지정된 컨트롤러를 표시하도록 라우팅 클래스에 해결 방법이 있습니까? 내가 말했듯이, 나는 컨트롤러에 어떤 컨트롤러가 있는지 알려주고 그것을 인식하지만 실제로 움직이지는 않습니다.

+0

이 말을하는 것은 유감 스럽지만, 부트 스트랩의 코드에 완전히 동의했다고 생각합니다. 프레임 워크를 사용하는 이유는 이런 것들을 할 필요가 없기 때문입니다. 액션에서'$ this-> request-> param()'을 사용하여 모든 루트 세그먼트 (또는 params)를 얻을 수 있습니다. http://kohanaframework.org/3.2/guide/kohana/routing # 요청 매개 변수 라우팅에 대한 실제 문제는 문서 및 Lethargy의 답변을 참조하십시오. URI에 ''이없는 경로를 지정하고 defaults()에 기본 컨트롤러를 설정할 수 있습니다. –

답변

1

당신이 생각하는 것보다 훨씬 복잡합니다. 또한 코드는 모든 요청에 ​​대해 6 개의 매개 변수의 한계를 강제합니다.

아마도 두 개의 다른 경로를 사용하는 것이 더 쉬울 것이고, 첫 번째 경로와 일치하지 않으면 두 번째 경로로 다시 폴백 할 수 있습니다.

Route::set(
    'categories', 
    '(<category>(/<action>(/<param1>)(/<param2>(/<param3>(/<param4>(/<param5>(/<param6>)))))))', 
    array('category' => '(movies|games)') 
    )->defaults(array(
     'controller' => 'category', 
     'action'  => 'index', 
)); 
Route::set(
    'users', 
    '<username>(/<action>(/<param1>)(/<param2>(/<param3>(/<param4>(/<param5>(/<param6>))))))' 
    )->defaults(array(
     'controller' => 'users', 
     'action'  => 'index', 
)); 

하나 또는 두 개의 범주 만있는 경우 정규식 문자열에 추가 할 수 있으며 일부 캐싱은 물론 가능합니다.

그렇지 않으면 look up lambda routes, 이러한 수단은 이러한 동적 경로를 가질 수있는 수단입니다.

+0

위의 추가 # 1을 읽으십시오. – bowlerae

관련 문제