URI Routing
URI 라우팅이라는 것은 사용자가 접근 한 URI에 따라서 Controller의 메소드를 호출해주는 기능이다. 이에 대해서는 이미 Controllers 수업에서 살펴봤다. 기본적인 룰을 다시 살펴보면 아래와 같다.
ooo2.org/index.php/class/method/id
ooo2.org/index.php/topic/get/1
위의 URL은 아래 파일을 로드한다.
application/controllers/topic.php
그리고 get 메소드에 첫번째 인자로 1을 전달하며 호출한다.
URI 메핑 변경하기
만약 URI에 따른 Controller의 호출 규칙을 변경하고 싶다면 application/config/routes.php 파일을 수정하면 된다. URI의 규칙은 배열을 이용한다.
예제1
예를들어 아래의 URI을
ooo2.org/index.php/topic/get/1
아래의 URI로 변경하고 싶다고 하자.
ooo2.org/index.php/topic/1
그럼 아래의 구문을 routes.php 파일에 추가한다. $1은 첫번째 괄호의 값으로 치환된다.
$route['topic/(:num)'] = "topic/get/$1";
예제2
사용자가 /index.php/post/1로 들어오는 경우에도 controllers/topic.php 파일을 사용하게 하고 싶다고 하자.
그럼 아래와 같이 routes.php 파일을 추가한다.
$route['post/(:num)'] = "topic/get/$1";
예제3
URI 라우팅에는 정규표현식도 사용할 수 있다. 아래의 예제를 보자.
$route['topic/([a-z]+)/([a-z]+)/(\d+)'] = "$1/$2/$3";
아래의 URL은 위의 설정에 해당된다.
ooo2.org/index.php/topic/module/get/3
이것은 아래의 파일을 로드한다.
application/controllers/module.php
그리고 아래의 메소드를 호출한다.
get(3)
코드
application/config/routes.php
차이점
전체코드
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); $route['topic/(:num)'] = "topic/get/$1"; $route['post/(:num)'] = "topic/get/$1"; $route['topic/([a-z]+)/([a-z]+)/(\d+)'] = "$1/$2/$3"; $route['default_controller'] = "topic/index"; $route['404_override'] = 'errors/notfound';
application/controllers/module.php
<?php class Module extends CI_controller { public function get($id){ echo $id; } } ?>
application/controllers/errors.php
<?php class Errors extends CI_controller{ public function notfound(){ $this->load->view('head'); $this->load->view('error/404'); $this->load->view('footer'); } } ?>
application/views/error/404.php
존재하지 않는 페이지 입니다.
태그
태그명 : URIRouting
태그주소 : https://github.com/egoing/codeigniter_codeingeverbody/tree/URIRouting