2014-04-30 2 views
0
내가에서 예를 들어, 내 URL을 "단축"하기 위해 노력하고있어

:CodeIgniter의 사용자 정의 보편적 인 라우터 클래스

$route['(.*)'] = 'router/resolve/$1'; 

을 : routes.php에 추가하여

http://mydomain.com/something-here 

http://mydomain.com/controller/method/something-here 

Router 클래스를 만들고,이 클래스의 resolve() 메서드는 something-here은 데이터베이스 테이블 (엔티티) 중 하나의 행과 일치합니다. 그렇다면 적절한 컨트롤러 :: 메서드를 호출하여 항목을로드하려고합니다. something-herebook의 한 종류 인 경우

예를 들어, 나는 Book::view($id) 전화 Router::resolve()을하고 싶습니다.

그러나 컨트롤러가 다른 컨트롤러의 메서드를 호출 할 수 없다는 것을 알고 있습니다. (그것은인가?)

가 나는 또한 bookRouter::resolve() (첫 번째 세그먼트)를 호출합니다 redirect("book/view/$id")$route['(.*)'] 때문에 사용할 수 없습니다.

내 목표를 달성하는 방법에 대한 제안이 있으십니까?

+0

http://stackoverflow.com/questions/10845440/furls-with-codeigniter/10845725#10845725 – Rooneyl

+0

과 같은 리디렉션 컨트롤러를 사용하는 것만 큼 '무엇인가'앞에 여전히 'text /'를 사용하고 있습니다. 도메인 바로 다음에 URL을 '무엇인가 - 여기'로 만들고 싶습니다. – Obay

+0

죄송합니다. 다른 컨트롤러에서 컨트롤러 호출. 내가 생각할 수있는 가장 좋은 해결책은 HMVC https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/입니다. – Rooneyl

답변

0

두 가지 해결책을 생각해 볼 수 있습니다.
1) 다른 컨트롤러에서 한 컨트롤러를 호출 할 수있는 HMVC architecture을 사용하십시오.

2) 경로를 동적으로 생성하십시오.
이것은 가장 효율적이거나 우아한 해결책은 아니지만 옵션입니다. 이 루트는 (_parse_routes에서) 정규식을 사용하여 처리하는 그래서 이것은 성능이 가장 빠른하지 않을 수 있습니다 전에 나에게 지적 한 바와 같이

<?php 
$route[ 'default_controller' ] = 'main'; 
$route[ '404_override' ]  = 'error404'; 

require_once(BASEPATH .'database/DB'. EXT); 
$db =& DB(); 
$query = $db->get('whatever_table'); 
$result = $query->result(); 
foreach($result as $row) 
{ 
    $route[$row->slug.'/(:any)'] = $row->controller.'/'.$row->method.'/$1'; 
} 

, 그것은 얼마나 많은 노선이 생성 될 것입니다 및 방법을에 따라 달라집니다 성능에 미치는 영향을 느껴보십시오.

관련 문제