CI 묻고 답하기

제목 CI4 locale을 위한 Route 설정 관련.
카테고리 일반
글쓴이 쉐굴 작성시각 2019/09/30 10:37:41
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 307   RSS

안녕하세요 선배님들.

일 자체가 옛날 코드를 너무 많이 보다보니 발전이 없는 것 같아서 개인 프로젝트에 언어를 php7로 올리고 프레임워크도 최신버전으로 바꾸자해서 CI4로 바꾸어서 공부중에 있습니다.

근데 CI4 자체가 릴리즈 된 지 얼마 안되서 정보가 거의 없더군요.나름 문서를 열심히 보고 있지만 딸리는 언어능력 때문에 조금 어려운 점이 있네요.

현재 저는 다국어 설정 방법을 공부하고 있습니다.

https://codeigniter4.github.io/userguide/outgoing/localization.html

상기 링크에서 나와 있는데로 따라하고 있는데 $negotiateLocale 값을 통한게 아닌 Route 값을 통해서 다국어를 설정하고 싶어서 그에 맞게 Routes.php를 수정중에 있습니다. 문서에 보면,

$routes->get('{locale}/books', 'App\Books::index');

이런식으로 예제가 되어 있고 {locale} 이라는 설정을 통해 /kr/books 로 접속을하면 kr이라는 locale값이 자동으로 셋팅이되고  Books 컨트롤러 index로 가는걸로 이해했습니다.저도 그래서 /en/, /kr/ /ch/ 등의 locale 값들을 여러 컨트롤러에 전달 하고 싶어서 여러가지 셋팅을 하고 있는데 잘 안되네요.

제가 원하는 접속 방법은,/kr/home/index, /en/home/test/, /jp/main/index, /ch/main/test2 이런식으로 {locale}/Controller/Method URL을 입력하면 /Controller/Method로 연결되면서 locale 값이 넘어가는 것이였는데, 여러 방법으로 설정값을 바꾸어봐도 잘안됩니다 ㅠㅠCI3를 사용 할 때도 Route쪽은 잘 사용을 안해봐서 그런지 몰라도 방법이 틀린건지 이해를 잘못한건지 모르겠네요. 

어찌 저찌 하다보니 제 나름 찾은 방법은...

$routes->get('{locale}/home/(:any)', 'Home::$1');   $routes->get('{locale}/main/(:any)', 'Main::$1');이렇게 Controller 명을 고정 시키고 Method 명만 달리하니까 동작은 잘 됩니다만, Controller가 늘어나면 늘어날 수록 이걸 다 입력해야하나? 라는 생각이 드네요.

그래서 $routes->get('{locale}/(:any)/(:any)', '$1::$2'); 이런식으로 변경도 해보았는데 이상하게 이건 동작을 안해서 무엇이 문제인지 몰라 아직도 끙끙 되고 있습니다.

선배님들 중에 혹시 이 부분에 대해서 잘 알고 계시는 분이 계시면 조언을 좀 부탁드립니다.

오늘도 좋은 하루되세요.

고맙습니다.

 

 다음글 CI 마이크로 서비스 가능여부? (3)
 이전글 [게시판]Controller 페이지에서 값 두개 넘기는... (4)

댓글

변종원(웅파) / 2019/09/30 12:18:38 / 추천 1

https://codeigniter4.github.io/userguide/incoming/routing.html#regular-expressions 

이것을 응용해보세요. 조금만 변경하면 됩니다.

쉐굴 / 2019/09/30 13:27:19 / 추천 0

변종원님 답변감사합니다.

말씀해주신 링크에 예제를 참고해서  아래와 같이 코드를 만들어 보았는데 동작을 안하네요.

$routes->add('{locale}/([a-z]+)/(:any)', '$1::$2');

하지만 Controller를 고정 값으로 넣으면 또 동작합니다.

$routes->add('{locale}/([a-z]+)', 'Home::$1');

그래서 locale 값을 뺴고 $routes->add('products/([a-z]+)/(:any)', '$1::$2'); 로 넣고 URL은 /products/home/index 로 접속을 시도 해보았는데 이것도 접속이 안되네요... 뭔가 설정이 이상한 것 같은데 답이 안나오네요 ㅠㅠ 컨트롤러 서브디렉토리 설정이랑 이거랑 하루종일 삽질하는데 답답하네요 후...