CodeIgniter

URI Routing

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

댓글

댓글 본문
작성자
비밀번호
  1. 신입1
    감사하므니다
  2. 보보
    깔끔한 명강의에요.ㅎ
  3. JustStudy
    고맙습니다
  4. 양수경
    정말 좋은 강의입니다.

    강의 이해가 쏙쏙 잘되고 지금 정주행 해서 듣고 있는데 잘 듣고 있습니다.

    강의 해주시는 분이 정말 전문 강사 보다 더 잘하시는거 같아요

    감사합니다.~
  5. 감사합니다.
  6. 쌈닭
    대화보기
    • 조현식
      정말 감사합니다 ㅎㅎㅎㅎ
    • 김승갑
      좋은 강의 감사합니다. 많이 배워가네요 :D
    • 김동진
      코드 이그나이터 한국 사용자 포럼에서 본적이 있는 내용같은데요.
      한번 둘러보시면 좋을것 같아요! 23일 전 댓글이지만 답글 달아봅니다. ㅎㅎ
      대화보기
      • leonlim6875
        루트 defalut_contoller 변경휘 localhost.xxx.index.php.topic 이 작동을 하지안습니다..
        localhost.xxx.index.php.topic 해야만 작동이 됨니다 index.php 없에는 방법 있아요?
      • 안녕하세요
        웹 페이지 개발하면서 궁금한 것이 있어 글을 남김니다.
        friendly url을 만들려고 하는데요... 구글링이 서툴러서 그런지 정보 찾는게 쉽지가 않아서요..
        도움이 될 만한 정보를 얻을 수 있을까요??
      • Korea Space Weather Center
        http://codeigniter-kr.org/user...
        페이지의 "컨트롤러들을 하위폴더로 구성하기" 를 참고 하시면 될것 같네요.
        대화보기
        • 검은빨대
          저 궁금한게 있는데요. CI 가 처음이라 마냐님 게시판을 받아서 분석하려고 하고 있습니다만, 컨트롤러 디렉토리 안에 다시 서브 디렉토리들이 있고 그 안에 콘트롤 파일들이 있습니다. (예 : 로그인등), 그런데 문제는 URI 로 붙었을때 그 디렉토리를 찾지를 못합니다.일반적으로 콘트롤러 안에있는 클래스를 찾는듯 한데 서브 디렉토리에 위치한 클래스는 어떻게 세팅을 해야 찾을수 있는지요. 알려주세요~~~ 아무리 뒤져도 안보여서 ㅠ,.ㅠ
        버전 관리
        egoing
        현재 버전
        선택 버전
        graphittie 자세히 보기