CI4

[코드이그나이터] 라우팅

으누아빠 2020. 8. 28. 19:28
반응형

라우팅

출처:
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);