CI 묻고 답하기

제목 컨트롤러 관련 질문입니다!
카테고리 CI 2, 3
글쓴이 syrup 작성시각 2019/01/21 16:08:55
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 17796   RSS

안녕하세요!

코드이그나이터를 공부 중에 궁금한 점이 생겨 질문드립니다

코드이그나이터를 보면 controller model view 를 통해서 웹에 페이지가 나타나는 구조인거 같은데요.

이렇게 되면 index.php 죽이기 과정을 진행했다는 가정하에

http://example.com/[controller-class]/[controller-method]/[arguments] 이와 같은 경로에서 나타난다는걸 알았습니다.

그런데 혹시 베이스 경로가 / 이라 했을 때

/ 경로상에 index.html을 생성한 후

페이지를 표시할 때 local에서 작업할때처럼 컨트롤러와 뷰를 거치지 않고

http://example.com 접속시 바로 index.html 페이지가 나타나도록 하는 방법이 있는지 궁금합니다

 

이런 식의 표현이 가능하면 훨씬 간편한 구조가 될 것 같아서요

 다음글 csrf 갱신관련문의 (1)
 이전글 컨트롤러에서 조회된데이터에 서브쿼리 쓰는 방법이 있나요... (3)

댓글

변종원(웅파) / 2019/01/21 17:44:36 / 추천 1

없습니다. 프레임워크를 쓰면서 그렇게 사용할 이유도 없구요.

아마도 아파치 서버에서 index.html이 우선이라 나올지도 모르겠네요

kaido / 2019/01/22 09:27:12 / 추천 0

프레임워크 사용 안하는 거랑 차이점이... ^^?

 

컨트롤러가 Test.php 이라 가정 했을때 uri 주소를

https://example.com/test.php 형태로 나타내는 방법은 있습니다.

엽토군 / 2019/01/22 10:31:17 / 추천 0

질문자님은 아마도 "첫화면 하나 띄우자고 컨트롤러 뷰 다 만들어야 하나" 싶어서 질문하신 것 같은데 (아닐 수도 있지만) 만약 그런 거라면 MVC프레임워크 사용에 대한 개념을 좀 바꿔보심이 어떤가 합니다.

저라면 정적 뷰 하나만 처리하는 하나의 컨트롤러에 하나의 메소드만 만들어놓고 재사용할 것 같습니다. 이는 매뉴얼이 제시하는 가이드이기도 합니다.

// config/routes.php
$route['about/(:any)'] = 'static/index/$1';

// controllers/Static.php
public function index($sub_route = null) {
  $this->load->view('layout/header');
  $this->load->view('static/'.($sub_route ?? 'front'));
  $this->load->view('layout/footer');
}

 

syrup / 2019/01/22 11:18:16 / 추천 0

답변 감사합니다!

제 질문을 좀 더 구체적으로 설명드리면

1.html , 2.html, 3.html 의 3개 파일이 있다 가정했을때

이 파일들을 꼭 /application/view 경로에 두지 않고

/ 경로에 위치시키는 방법이 없을까요??

즉, 제가 나타내고자 하는 파일이 꼭 /application/view 폴더에 위치시켜야 하는지가 궁금합니다!

변종원(웅파) / 2019/01/22 12:13:24 / 추천 0

core를 수정해서 뷰 디렉토리를 변경할 수 있으나 왜 그렇게 해야하는지 설명이 없는 상태에서는 하지말라고 답변할 수밖에 없습니다.

왜 그렇게 하고 싶은건가요? ^^

syrup / 2019/01/22 12:33:49 / 추천 0

답변 감사합니다! 

사이트가 보완작업을 거치고 기능이 추가되면

컨트롤러 파일과 뷰파일이 늘어나면서 사이트의 구조를 한 눈에 파악하기가 점점 힘들어지지 않을까 해서요

이 비유가 맞을지 모르겠지만 추후에 쓸 수도 있는 파일들을 /application/views에 위치시키고

실제로 보여주고 싶은 파일들은 / 경로에 두면 추후에 수정 및 보완 작업시 혹은 다른 개발자가 봤을때

헷갈릴 여지가 없지 않을까 생각했습니다!

 

조금 더 찾아본 결과 제가 알고자 하는 방식이 기존의 날코딩 방식이라는 것을 알았습니다!

비슷하지만 다르게 질문드리면 

제가 현재 작업중인 사이트는 도메인 입력시 나타나는 페이지의 파일이 / 경로에 있는데

/application/config/routes.php 파일에서 $route['default_controller'] 에서 명시한 컨트롤러를 통해 뷰파일을 찾아보니 

다른 파일이였습니다.

제가 알기론 위의 $route['default_controller'] 에서 명시한 컨트롤러가 도메인 입력시 기본으로 뜨게 되는걸로 알고 있었는데

어떻게 이게 가능한지 궁금했습니다

변종원(웅파) / 2019/01/22 13:33:46 / 추천 0

그런 상황이면 차라리 application 디렉토리를 2개 두어 application 은 현재 프로젝트, application2는 향후 프로젝트. 이렇게 사용할 수 있습니다.

메소드에 따라 구분을 할건지 혼용할건지에 따라 복잡도가 달라지기는 하지만 프레임워크를 쓰는 이상 프레임워크 사용법 내에서 해결하려고 하는 것이 좋습니다.

변종원(웅파) / 2019/01/22 13:36:05 / 추천 0
두번째 질문은 프레임워크의 역할이고 전체 소스에서 default_controller 검색해보세요. 주소에 컨트롤러, 메소드가 없을 경우 그 컨트롤러를 사용하도록 프로그램되어 있습니다.
syrup / 2019/01/22 14:01:58 / 추천 0
감사합니다 웅파님 덕분에 궁금했던게 해결됐습니다!