개발환경

  • Windows OS
  • Bitnami WAMP 사용
  • 실습경로 : Bitnami 설치폴더/htdocs/ci3 

Codeigniter 3(이하 Ci 3) Framework를 사용하다보면 거슬리는 문제가 하나 있습니다.

 바로 생성한 페이지 사이에 'index.php'라는 경로를 계속 명시해줘야하는 것인데 우선 ci 3의 컨트롤러 부분부터 간단히 살펴본 후에 Ci 3에서 사용자의 요청(웹 사이트 요청)을 어떤 순서로 처리하는지 정리해보겠습니다.


1. Ci 3 의 컨트롤러 살펴보기

Ci 3를 설치하면 아래 경로에 MVC기반의 디렉토리가 생성되어있고 php 클래스 파일이 있습니다.

\bitnami\apache2\htdocs\ci3\application\controllers

위 경로 안에 'welcome.php'라는 파일을 확인 할 수 있는데, 간단히 살펴보면 "Welcome"이라는 php 클래스 파일입니다.

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller {

	/**
	 * Index Page for this controller.
	 *
	 * Maps to the following URL
	 * 		http://example.com/index.php/welcome
	 *	- or -
	 * 		http://example.com/index.php/welcome/index
	 *	- or -
	 * Since this controller is set as the default controller in
	 * config/routes.php, it's displayed at http://example.com/
	 *
	 * So any other public methods not prefixed with an underscore will
	 * map to /index.php/welcome/<method_name>
	 * @see https://codeigniter.com/user_guide/general/urls.html
	 */
	public function index()
	{
		$this->load->view('welcome_message');
	}
}

2. MVC 패턴?

Ci 3는 MVC 패턴 구조를 갖고 있습니다. (참고 : https://developer.mozilla.org/ko/docs/Glossary/MVC)

 그래서 작성한 페이지를 호출하기 위해선 'C (Controller)'를 호출해줘야만 합니다.

MVC로 이루어진 프레임워크에선 C에 해당하는 컨트롤러가 나머지 V(View-보여주는 방식)와 M (Model-데이터 정의)를 말 그대로 '컨트롤'하기 때문입니다.


3. "Welcome" 클래스는 어떻게 호출이 될까

'http://localhost/ci3/'로 접속해보면 아래화면 처럼 Welcome 클래스가 호출됩니다.

 근데 주소에 'Welcome'이라는 단어도 없는데 어떻게 호출이 된 것인지 확인해보겠습니다.

bitnami\apache2\htdocs\ci3\application\config\routes.php

위 경로의 'routes.php' 소스를 살펴 보면 'defaut_controller'라는 Key에 'welcome'이 명시되있는 걸 확인 할 수 있습니다.

Ci 3에선 Directory를 감추기 위해 이런식으로 호출할 주소와 클래스를 맵핑 시킬 수 있습니다.

$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

defaut_controller의 key 역할은 아무 Class를 주소에 명시하지 않았을 경우에 Defalut로 호출할 클래스를 설정하는 부분입니다.

그렇기 때문에 'http://localhost/ci3/' 주소를 호출하면 'Welcome' 컨트롤러 클래스가 호출되는 겁니다.


그럼 아래처럼 한 번 설정을 추가해볼까요.

$route['default_controller'] = 'welcome';
$route['GO'] = 'welcome'; // GO라는 key를 추가
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

2번 째 줄에 'GO'라는 key를 추가하면서 welcome 클래스와 맵핑을 시켰습니다.

'http://localhost/ci3/go'를 호출하면 welcome 클래스를 실행시키겠지만...

결과는 호출되지 않습니다.

Ci 3의 특성상 주소(경로)에 'index.php'를 컨트롤러 앞에 작성해주지 않으면 호출이 안 되기 때문입니다.

(왜 꼭 index.php가 들어가야 작동하는 지에 대해선 다음에 다뤄보겠습니다.)

주소/ci3/index.php/클래스명(routes의 key명)으로 하니 호출이 된다!

http://localhost/ci3/GO
http://localhost/ci3/index.php/GO

주소를 아래 처럼 index.php를 넣어주니 정상적으로 작동이됩니다.

마찬가지로 'http://localhost/ci3/index.php/welcome'로 호출하여도 'http://localhost/ci3/'와 같이 welcome 컨트롤러 클래스가 호출됩니다.

 

+ Recent posts