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. 해당 부분을 열심히 보고 하고 있는데.

    CI 콘트롤러의 파일명의 첫자는 콘트롤로 클래스 같이 대문자로 써주어야 하는건가요?

    실습처럼 소문자로 하니까 안되고 대문자로 작성해야 되네요?

    그것이 맞는건가요?
  2. 김세창
    감사합니다. 잘배워갑니다~@@
  3. 신입1
    감사하므니다
  4. 보보
    깔끔한 명강의에요.ㅎ
  5. JustStudy
    고맙습니다
  6. 양수경
    정말 좋은 강의입니다.

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

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

    감사합니다.~
  7. 감사합니다.
  8. 쌈닭
    대화보기
    • 조현식
      정말 감사합니다 ㅎㅎㅎㅎ
    • 김승갑
      좋은 강의 감사합니다. 많이 배워가네요 :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 자세히 보기