라우팅
출처:
http://ci4doc.cikorea.net/incoming/routing.html
URI 세그먼트의 일반적인 패턴
example.com/class/method/id/
라우팅을 이용한 패턴
example.com/product/1/
자리 표시자(Placeholder)
경로에서 첫번째 매개변수는 일치한 URI 이고 두번째 매개 변수는 라우팅해야할 대상
아래의 예제에서 URL의 첫번째 세그먼트는 product 이고 두번째 세그먼트에 숫자가 있으면
Pages 클래스의 view 메소드로 라우팅 됨
$routes->add('product/(:num)', 'Pages::view');
Placeholders | Description |
---|---|
(:any) | 해당 시점부터 URI 끝까지의 모든 문자와 일치 |
(:segment) | 결과를 단일 세그먼트로 제한하는 슬래시(/)를 제외한 모든 문자와 일치 |
(:num) | 모든 정수와 일치 |
(:alpha) | 모든 알파벳 문자와 일치 |
(:alphanum) | 영문자, 정수 문자열, 둘의 조합과 일치 |
(:hash) | (:segment)와 같습니다. 그러나 hashded id를 사용 |
$routes->add('product/(:segment)', 'Catalog::productLookup/$1'); 일경우
위의 경로는 product/123만 일치하고 다른 예(product/123/456, product/123/456/789 등)은 오류를 발생
$routes->add('blog/joe', 'Blogs::users/34');
"blog/joe" 세그먼트가 포함된 URL은 "Blogs" 클래스의 "users" 메소드로 매핑됩니다. ID는 "34" 로 설정됩니다.
$routes->add('product/(:any)', 'Catalog::productLookup');
첫 번째 세그먼트가 “product”이고 두 번째 세그먼트가 있는 URL은 “Catalog” 클래스의 “productLookup” 메소드로 매핑됩니다.
위의 경로는 product/123, product/123/456, product/123/456/789 등과 일치합니다.
$routes->add('product/(:num)', 'Catalog::productLookupByID/$1');
첫 번째 세그먼트가 “product”이고 두 번째로 숫자가 있는 URL은 “Catalog” 클래스의 “productLookupByID” 메소드로 매핑되고, 두 번째 세그먼트의 숫자를 메소드 변수에 전달합니다.
사용자 정의 자리 표시자
가독성을 위해 경로(route) 파일에 사용자 정의 자리 표시자를 만들어 사용가능
$routes->addPlaceholder('uuid', '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}');
$routes->add('users/(:uuid)', 'Users::show/$1');
정규식
원하는 경우 정규식을 사용하여 라우팅 규칙을 정의할 수 있음
$routes->add('products/([a-z]+)/(\d+)', 'Products::show/$1/id_$2');
products/shirts/123과 유사한 URI는 대신 Products 컨트롤러 클래스의 show 메소드를 호출하고 세그먼트가 첫 번째 및 두 번째 세그먼트가 인수로 전달
다중경로 매핑
한번에 여러경로를 매핑하려면 add() 모다 map()메소드를 사용하는것이 편리
$routes = [];
$routes['product/(:num)'] = 'Catalog::productLookupById';
$routes['product/(:alphanum)'] = 'Catalog::productLookupByName';
$collection->map($routes);
'CI4' 카테고리의 다른 글
[코드이그나이터] [첫번째 어플리케이션 제작(튜터리얼)] 뉴스 섹션 (0) | 2020.08.31 |
---|---|
[코드이그나이터] [첫번째 어플리케이션 제작(튜터리얼)] 정적 페이지 (0) | 2020.08.28 |
[코드이그나이터] 사용자 정의 예외 (0) | 2020.08.28 |
[코드이그나이터] esc() 전역함수 (0) | 2020.08.28 |
[코드이그나이터] 개발환경을 development 으로 변경하기 (0) | 2020.08.27 |