본문 바로가기

Language/PHP

[CodeIgniter] URI Routing

URI Routing

  • 사용자가 접근한 URI에 따라서 Controller의 메소드를 호출해주는 기능


▣ URL 기본 규칙


ex ) http://~/index.php/Controller/Method/1


첫번째 path : Controller

두번째 path : 그 콘트롤러의 method

세번째 path ~ : 두번째 method에 전달되는 파라미터



▣ URL 매핑


  • 대상(URI)과 대상(URI에 해당하는 Contorller, method, parameter)을 일치시키는 것.
  • 기본적으로 코드이그나이터는 매핑 규칙을 가지고 있으나, 그 규칙과는 다른 맵핑 형식을 사용하고 싶을 때는, URL 맵핑을 변경하면 된다.



▣ 코드이그나이터 URL 매핑 변경하기


가장 중요한 것 : 맵핑 규칙을 정의하는 파일에 대해 이해하는 것.

application>config>router.php : URI 라우팅 규칙을 정의할 수 있는 파일.


일반적으로 URI에서 method이라고 하는 것은 URL 상에서 불필요한 존재

이유: 1이라고 하는 것은 아이디값이기 때문에 method가 없어도 의미 전달에 충분하기 때문. -> 일반적으로 코드이그나이터 규칙으로는 성립되지 않음.



▣ 이 규칙을 바꾸는 방법 (코드이그나이트 URL 매핑 변경하기)


  • 기본

ex) $route['topic/(:num)'] = "topic/get/$1";


해석 ]

route라는 배열에 'topic/(:num)' 부분은 키값을 의미한다.

사용자가 접근한 URL이 이 키값에 해당되는 규칙에 해당된다면 = 뒤에 있는 route의 value값에 해당되는 'topic/get/$1'가 호출된다.

$1 :  back reference , :num 양옆에 괄호를 하게 되면 괄호안에 들어가는 값이 $1이라는 파라미터가 되어서 치환된다.


  • 정규표현식을 사용한 방법 + 클래스 재정의

URL 라우팅에서는 정규표현식도 사용할 수 있다. 정규표현식의 규칙을 사용하여 좀더 복잡한 형태의 URI 매핑을 할 수 있다.
- 정규표현식? 문자에서 어떤 패턴을 찾아내는 일종의 프로그래밍 언어


ex) $route['topic/([a-z]+)/([a-z]+)/(\d+)'] = "$1/$2/$3";


해석 ]

[a-z]+ : [대괄호]안에 있는 문자중에 하나(+)라도 해당된다면, 이 패턴과 값이 일치하는 것.

[a-z]+ : 수량한정자, 앞에 있는 [a-z] 조건에서 한개 이상이라면 이 패턴에 일치한다.

\d : 숫자를 의미 , 숫자 모두 만족


이 방법은 route.php에 위처럼 정의하고, 이 조건을 만족하는 클래스(controller)를 생성해주어야 한다.

ex) ~/index.php/topic/module/get/1

Module 클래스 생성(파일명:module.php). get method 생성. 1 파라미터





  • 코드이그나이터는 예약된 패턴을 가지고 있다.

- $route['default_controller'] = 'topic/index';

사용자가 어떤 Path를 지정하지 않고 웹에 접근했을 때, 어떤 Controller에 접근할 것인지 정하는 것.

위와 같이 설정한다면, 루트 디렉토리까지만 접근해도 지정한 페이지가 보여진다.


- $route['404_override'] = 'errors/notfound';

사용자가 존재하지 않는 페이지에 접속 했을 때 나오는 메시지 지정 (이 또한 클래스 생성 필요)


'Language > PHP' 카테고리의 다른 글

[CodeIgniter] 로그  (0) 2017.08.19
[CodeIgniter] 설정  (0) 2017.08.19
[CodeIgniter] Helper  (0) 2017.08.18
[CodeIgniter] MVC  (0) 2017.08.17
CodeIgniter (코드이그나이터)  (0) 2017.08.17