posted by JakeYeom 2017. 11. 15. 11:11

2장. 설정과 명명 규칙


CI 설정

CI의 설정

=> CI를 설치한후 처음해야할일 : 프로젝트 요구사항에 맞게 데이터베이스, 세션, 자동 로딩이 필요한 헬퍼, 라이브러리 등을 설정하는 작업

=> 주요설정파일 : config.php, database.php, autoload.php


CI 디렉터리구조


새로운 프로그인이나 리소스를 추가하기위해 새로운 디렉토리를 추가하는 경우

=> CI의 BASEPATH에 상대적인 위치로 참조한다. ex) CI/application/bootstrap의 경로는 $path = BASEPATH. "application/bootstrap/" 이다.


[config.php]

$config['base_url']

=> CI의 최상위 디렉토리를 기본 URL로 계산한다. 

     코드사용예시 $base_url = base_url(); // base_url()함수는 URL헬퍼에 정의되어있다.


$config['index_page']

=> CI컨트롤러나 메소드에 대한 URI 경로 문자열에 인덱스 페이지를 포함시키고 싶다면 $config=['index_page'] 에 'index.php' 값을 할당한다.

     index.php는 모든 URI 요청을 처리하는 CI의 최상위 서비스다. URI처리에서 index.php를 제거하고 싶다면 다음과 같은 설정 작업을 해야한다.


1. phpinfo()메소드를 통해 mod_rewrite 모듈이 로드되어있는지 확인하고 (안되어있으면 mod_rewrite부터 해결)

   APACHE서버내의 conf/httpd.conf파일의 <Directory> 태그를 찾아 AllowOverride None을 AllowOverride All로 변경한다.

2. $config['index_page'] = 'index.php'의 값을 $config['index_page'] = '' 로 변경한다.

3. BASEPATH 하위에 .htaccess파일을 작성하고 

<IfModule mod_rewrite.c>

  RewriteEngine On

  RewriteBase /

  RewriteCond $1 !^(index\.php|images|captcha|data|include|uploads|robots\.txt)

  RewriteCond %{REQUEST_FILENAME} !-f

  RewriteCond %{REQUEST_FILENAME} !-d

  RewriteRule ^(.*)$ /index.php/$1 [L]

</IfModule>

위와 같이 입력시켜준다.


위의 3가지를 만족하게 되면 http://localhost:8080/example2/more/1/2/3 과 같이 index.php가 URI에 포함되어있지 않아도 원하는 페이지출력결과를 얻을수 있다.

[ URI에서 index.php를 없앤 결과 ]



손대지 않기를 추천하는 설정변수들 

$config['language'] = 'english'; // 언어설정

$config['charset'] = 'UTF-8' // 문자인코딩, HTML파일 metatag에도 추가를하기를 추천한다.

$config['enable_hooks'] = FALSE // 후크설정

$config['subclass_prefix'] = 'MY_' // 사용자라이브러리의 프리픽스

$config['permitted_uri_class']  = 'a-z 0-9~$.:_\-' //  URI로 CI리소스를 호출할 때 사용할 수 있는 문자

$config['allow_get_array'] = TRUE // 컨트롤러 클래스의 메소드를 매개변수와 함께 호출가능하게 설정

$config['enable_query_strings'] = FALSE // GET방식의 URL 질의 문자열을 사용할 수 있는지 설정

$config['log_path'] // 로그경로설정

$config['log_threshold'] // 로그기준점 설정 0 : 로그기능 비활성, 1 : 에러 메시지, 2 : 디버그 메시지, 3 : 정보성 메시지, 4 : 모든 메시지

$config['log_date_format'] // 기본 날짜 시간 포맷

$config['cache_path'] // 캐시 파일 경로

$config['encryption_key'] // 세션 클래서의 서비스를 이용할때 설정


사이트 신뢰를 높일 수 있는 설정들

$config['global_xxs_filtering'] // XSS필터링 활성화, 악의적인 XSS필터링  타입 공격으로부터 URI요청을 보호

$config['csrf_protection'] // 사이트간 위조 공격을 막음( 위조된 폼을 전송했을때 위험하다, AJAX요청시에는 별도의 추가적인 코드가 필요함 )



[database.php]

database는 2차원 배열의 형식으로 설정변수를 할당하고 있으며 다음과 같이 이용할 수 있다.

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => 'adminpw',
    'database' => 'aliendatabase',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

위처럼 한개의 DB이외에 다른 DB의 설정을 하고 싶다면

$db['anotherdb'] = array( 설정값 ); 과 같이 다른 설정값을 입력하면 된다.


연결할 데이터베이스를 직접 지정해 로딩하고 싶을때

=> $this->load->database('default');


기본이 아닌 다른 데이터베이스를 직접 지정해 로딩하고 싶을때

=> $this->load->database('anotherdb', TRUE);


기본 database연결시 쿼리문작성 방법

=>  $query = $this->db->query("select * from users");


기본이 아닌 database연결시 쿼리문작성 방법

=>  $query = $this-> anotherdb->db->query("select * from users");



[routes.php]

이 파일은 프로젝트의 기본 URI를 요청하면 실행항 기본 컨트롤러를 정의한다

$route['default_controller'] = 'welcome';

위와같이 default_controller를 설정하게 되면 서버의 최상위 디렉토리에 진입하게 될때 http://도메인/welcome을 호출하는것처럼 컨트롤러를 실행한다.


$route['404_override'] = 'notfound';

URI에 알지못하는 경로값을 입력하였을때에는 위에 해당하는 컨트롤러를 실행한다.


[사용자설정파일.php]

예를들어 나만의 설정정의를 사용하기위해 설정파일을 my_config.php라는 파일을 만들었다고 하자

해당 파일에는 아래와 같은 값이 정의되어 있다.

$userparam = 'value1';


다른파일에서 my_config.php 파일의 모든 변수를 배열에 로딩하여 손쉽게 접근할 수 있다.


해당파일에 작성 

$array = $this->config->load('my_config' ,TRUE);


사용

$userparam = $this->config->item('userparam', 'my_config'); 

$userparam = $array('my_config', 'userparam');


CI 명명 규칙의 이해와 사용

http://codeigniter.com/user_guide/general/styleguide.html에서 살펴볼 수 있다.


주요 리소스 명명규칙

CI는 하나의 클래스마다 하나의 파일이라는 규칙을 정해 모든 CI컨트롤러나 모델은 각자 한 파일에 담도록 규정한다. ( 헬퍼도 이와 같다 )


컨트롤러 사용

1. 컨트롤러의 index 메소드 호출

2. 매개변수 없이 컨트롤러의 calc 메소드 호출

3. 매개변수와 함께 컨트롤러 메소드 호출

4. AJAX를 통해 AJAX처리 메소드를 매개변수와 함꼐 호출하기


라이브러리, 모델, 헬퍼 로딩

사용자의 컨트롤러에서 라이브러리나 모델, 헬퍼 등의 기능을 사용하려면 컨트롤러나 모델 클래스에서 로딩해야 한다.

자동로딩을 하기 위해서는 application/config에 위치한 autoload.php 파일에 지정할 수 있다.


그 밖의 코딩 명명 규칙

  • 사용자의 클래스, 함수, 매개변수는 짧은 이름을 이용해야 한다. 여러 단어로 이를 정의할 경우에는 _(언더스코어, ex: source_code)를 이용한다.
  • 문자열 내에 변수가 들어있다면 큰 따옴표를 사용한다 ex: $my_str = "This is $clause";
  • 불리언 값은 대문자로 쓴다.




'백엔드 > CodeIgniter' 카테고리의 다른 글

CI. 4_라이브러리  (1) 2017.11.17
CI. 3_컨트롤러 사용법과 유효 범위  (0) 2017.11.17
CI. 1_입문  (0) 2017.11.13