[CodeIgniter] 컨트롤러(Controllers) 사용방법[CodeIgniter] 컨트롤러(Controllers) 사용방법

Posted at 2019. 7. 31. 16:39 | Posted in PHP/CodeIgniter




참고 : http://www.ciboard.co.kr/user_guide/kr/general/controllers.html





■ 컨트롤러란 무엇인가?



컨트롤러는 URL과 상호작용하는 클래스 파일이라고 할 수 있다.


파일명(File.php)과 클래스(File)명의 첫글자는 항상 대문자 이여야 한다.


클래스명은 컨트롤러 파일명과 동일해야 한다.



 ./application/controllers/Blog.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Blog extends CI_Controller {

public function index() {

echo "사악미소의 현대마법의 IT공방";

}

}


/* END of file Blog.php */

/* Location : ./application/controllers/Blog.php */




# 출력결과 : http://code-igniter.com/index.php/blog/










■ 함수 호출하기




이전 예제에서 호출된 함수는 index( )였는데, index( ) 함수는 URI에서 두번째 새그먼트가 전달되지 않은 경우 기본적으로 실행이 된다.


이번에는 URI에 새그먼트 값을 추가하여 Blog라는 클래스에 comments( )라는 함수를 호출해 보자.


 ./application/controllers/Blog.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Blog extends CI_Controller {

public function index() {

echo "사악미소의 현대마법의 IT공방";

}

public function comments() {

echo "방문해 주셔서 감사합니다";

}

}


/* END of file Blog.php */

/* Location : ./application/controllers/Blog.php */




# 출력결과 : http://code-igniter.com/index.php/blog/comments




그럼 위와 같이 새로운 메세지가 출력되는 것을 확인 할 수 있다.








■ URI 세그먼트 값을 함수에 전달하기




 ./application/controllers/Products.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Products extends CI_Controller {

public function shoes($sandals, $id) {

echo sprintf("sandals : %s", $sandals);

echo "<br/>";

echo sprintf("id : %s", $id);

}

}


/* END of file Products.php */

/* Location : ./application/controllers/Products.php */





# 출력결과 : http://localhost/index.php/products/shoes/sandals/123










■ 기본 컨트롤러 정의



코드이그나이터에서는 새그먼트 없이 사이트의 루트 URI만 요청될때 실행되는 기본 컨트롤러를 지정할 수 있다.


기본 컨트롤러를 지정하려면 ../application/config/routes.php 파일의 $route[ 'default_controller' ] 의 값을 설정해 주면된다.


 ./application/config/routes.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


      /* 주 석 생 략 */


$route['default_controller'] = "First";

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

$route['translate_uri_dashes'] = FALSE;



이제 First.php 파일을 controllers 디렉토리에 생성하고.


아래와 같은 코드를 작성해 보자.



 ./application/controllers/Blog.php

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class First extends CI_Controller {

public function index() {

echo "https://www.google.co.kr";

}

}


/* END of file First.php */

/* Location : ./application/controllers/First.php */





# 출력결과 : https://localhost




단순히 http://localhost라는 기본 주소를 입력하는 것만으로도


http://localhost/index.php/first 를 호출한것과 같은 결과를 얻을 수 있다.









■ 함수요청 재맵핑하기




일반적으로 URI의 두번째 새그먼트는 컨트롤러내의 어떤 함수를 실행할 것인가를 결정하낟.


이런 일반루틴을 재정의 하여 원하는 액션으로 바꿀 수 있다.



 http://code-igniter.com/index.php/rmapping/zerg 

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Rmapping extends CI_Controller {

public function _remap($method) {

if($method === "zerg") {

$this->zerg();

} else if($method === "protoss") {

$this->protoss();

} else {

$this->terran();

}

}

public function zerg() {

echo "군단의 심장";

}

public function protoss() {

echo "공허의 유산";

}

public function terran() {

echo "자유의 날개";

}

}


/* END of file Rmapping.php */

/* Location : ./application/controllers/Rmapping.php */




# 출력결과 : http://localhost/index.php/rmapping/zerg




위와 같이 출력되는 것을 확인 할 수 있다.




※ 참고


../application/config/routes.php 페이지의 


$route['default_controller'] 값을 "Rmapping" 으로 변경하고 사용하게 되면



# 출력결과 : http://localhost/index.php/rmapping/protoss









■ Private 접근제어 함수



PHP에는 public, private, protected 라는 3가지 접근 제어자가 존재한다.


접근제어자

기     능

public

 · class 밖에서도 함수에 접근이 가능하다.

 · 아무것도 명시하지 않으면 기본값이 public으로 선언된다.

private

 · 클래스 내부에서만 접근이 가능하다.

 · 상속이 불가능 하다.

protected

 · 클래스 내부에서만 접근이 가능하다.

 · 상속이 가능하다.







<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Access extends CI_Controller {

public function index() {

echo "접 근 가 능";

}

private function _utility() {

echo "접 근 불 가";

}

}


/* END of file Access.php */

/* Location : ./application/controllers/Access.php */




# 출력결과 : http://localhost/index.php/Access/index




# 출력결과 : http://localhost/index.php/Access/_utility



위와같이 URI의 새그먼트 값으로 _utility 함수를 호출하려고 하는경우


페이지를 찾을 수 없다는 404 Page Not Found


에러가 발생하는것을 확인 할 수 있다.








■ 클래스 생성자




컨트롤러에서 생성자를 사용하고자 한다면 생성자아래 반드시 아래의 코드가 들어있어야 한다.


 parent :: __construct( );


그렇지 않으면 직접 구현한 모든 생성자가 부모 controoler의 생성자를 재정의 하기 때문에


반드시 부모 controller를 수동으로 호출해 주어야 한다.



생성자는 클래스가 초기화될 때 어떤 기본값들을 설정해야 한다거나 어떤 프로세스를 수행해야 할때 유용하다.


생성자는 리턴값이 있어서는 안된다.



 

<?php

if(!defined("BASEPATH")) { exit("No direct script access allowed"); }


class Products extends CI_Controller {

public function __construct() {

parent::__construct();

}

}


/* END of file Products.php */

/* Location : ./application/controllers/Products.php */










Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[CodeIgniter] DataBase 접속 설정하기[CodeIgniter] DataBase 접속 설정하기

Posted at 2019. 7. 25. 17:06 | Posted in PHP/CodeIgniter





참고 : http://www.ciboard.co.kr/user_guide/kr/database/configuration.html




■ 코드이그나이터에서 DB 접속 설정하기



/application/config/database.php에 사용자, 비밀번호, HOST, 데이터베이스명을 입력해야 한다.



 /application/config/database.php

<?php

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


/* 주 석 생 략 */


$active_group = "default";

$query_builder = TRUE;


/*

$db['default'] = array(

  "dsn" => ""

, "hostname" => "IP주소"

, "username" => "DB접속계정"

, "password" => "계정비밀번호"

, "database" => "DB이름"

, "dbdriver" => "mysqli"

, "dbprefix" => ""

, "pconnect" => FALSE // pconnect 값이 TRUE일 사용할 경우 웹 호스팅 환경에서는 실행이 되지 않는다.

, "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['default']['dsn'] = "";

$db['default']['hostname'] = "DB IP주소";

$db['default']['username'] = "DB접속계정 아이디";

$db['default']['password'] = "DB접속계정 비밀번호";

$db['default']['database'] = "DB 이름";

$db['default']['dbdriver'] = "mysqli";

$db['default']['port'] = "3306";

$db['default']['dbprefix'] = "";

$db['default']['pconnect'] = FALSE;      // pconnect 값이 TRUE일 사용할 경우 웹 호스팅 환경에서는 실행이 되지 않는다.

$db['default']['db_debug'] = (ENVIRONMENT !== "production");

$db['default']['cache_on'] = FALSE;

$db['default']['cachedir'] = "";

$db['default']['char_set'] = "utf8";

$db['default']['dbcollat'] = "utf8_general_ci";

$db['default']['swap_pre'] = "";

$db['default']['encrypt'] = FALSE;

$db['default']['compress'] = FALSE;

$db['default']['stricton'] = FALSE;

$db['default']['failover'] = array( );

$db['default']['save_queries'] = TRUE;


$arrParseUrlparse_url$_SERVER[ 'HTTP_HOST' ] );


if( ( isset$_SERVER[ 'HTTPS' ] ) && $_SERVER[ 'HTTPS' ] == "on" ) ) {

    $arrParseUrl[ 'scheme' ] = "https";

} else {

    $arrParseUrl[ 'scheme' ] = "http";

}


if ( strlen ( trim$db['default']['hostname'] ) ) == 0 ) {

    echo( "#############################################################################" );

    echo "</br> default DBMS 접속 호스트 정보가 정확하지 않습니다. </br>\n\n";

    echo "<pre>";

    var_export$arrParseUrl );

    echo "</pre>";

    exit( "-----------------------------------------------------------------------------" );

    echo "<pre>";

    var_export$db );              

    echo "</pre>";

    exit( "#############################################################################" );

}



※ 데이타베이스 설정값

환경값

설     

dsn

 · DSN 연결문자

hostname

 · 데이터베이스 서버의 IP주소

 · 같은 서버일경우 localhost, 120.0.0.1

username

 · 데이터베이스의 사용자 아이디

password

 · 데이터베이스의 사용자 비밀번호

database

 · 연결하고자 하는 데이터베이스 이름

dbdriver

 · 데이터베이스 타입

 · mysqli, postgre, odbc, etc등

 · 반드시 소문자 여야만 한다.

port

 · 데이터베이스 포트 번호

dbprefix

 · Query Builder를 사용할 경우 테이블명에 자동으로 접두어를 붙임

 · 하나의 데이터베이스로 여러개의 CodeIgniter를 사용할 때 유용함

pconnect

 · 영속적연결(Persistent Connection)을 사용할 것인지 말것인지 결정한다.

 · BOOLEAN 타입( TRUE / FALSE )

db_deboug

 · 데이터베이스 에러를 표시할지 말지를 결정

 · BOOLEAN 타입( TRUE / FALSE )

cache_on

 · 데이터베이스 쿼리를 캐시할 것인지를 결정(쿼리를 텍스트 파일로 캐싱하여 데이터베이스의 부하를 줄인다.)

 · BOOLEAN 타입( TRUE / FALSE )

cachedir

 · 데이터베이스 쿼리 캐시가 저장될 절대경로

char_set

 · 데이터베이스와 통신할 때 사용할 문자셋

dbcollat

 · 데이터베이스와 통신할 때 사용되는 문자열 대조법(Character Collation)

 · 'mysql'과 'mysqli' 드라이버에서만 사용된다.

swap_pre

 · 기본 테이블 접두어가 dbprefix에서 교체된다.

 · 수동으로 작성된 쿼리를 실행하고, 최종 사용자에 의해 변환될 때 접두어가 여전히 필요할 때 유용하다.

schema

 · 데이터베이스 스키마, "public"이 기본이다.

 · PostgreSQL 및 ODBC 드라이버에서 사용한다.

encrypt

 · 암호화 연결을 사용할지 결정

compress

 · 클라이언트 압축을 사용할지를 결정한다.

 · MySQL 전용이다.

stricton

 · 스트릭 모드 연결을 강제로 사용할지 여부를 선택한다.

 · 어플리케이션을 개발하는 동안 엄격한 SQL을 보장하기 위해 좋다.

 · BOOLEAN 타입( TRUE / FALSE )








Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[CodeIgniter] 리눅스 환경에 코드이그나이터 세팅하기[CodeIgniter] 리눅스 환경에 코드이그나이터 세팅하기

Posted at 2019. 7. 23. 17:07 | Posted in PHP/CodeIgniter




■ Linux 환경에 CodeIgniter 설치하기





리눅스 환경코드이그나이터를 설치하기 위해서는


현재 지원중인 코드이그나이터의 버전을 확인해야 한다.


코드이그나이터 사이트( http://www.codeigniter.com/download ) 에 접속하여


사용할 수 있는 버전을 확인하자.







버전을 확인했다면 wget 을 사용하여 해당 버전을 다운로드 받아보자.


 $ sudo wget https://github.com/bcit-ci/CodeIgniter/archive/서비스중인 버전.zip -P /다운받을 디렉토리 경로

 $ sudo wget https://github.com/bcit-ci/CodeIgniter/archive/3.1.10.zip -P /var/www/html/



다운을 받았다면 해당 파일의 압축을 해제한다.


 $ sudo unzip 다운받은 파일.zip -d 압축해제 디렉토리의 경로

 $ sudo unzip /var/www/html/3.1.10.zip -d /var/www/html/




※ 참고 : wget, unzip 설치방법

 

Ubuntu

CentOS

wget

 $ sudo apt-get install wget

 # yum install wget

unzip

 $ sudo apt-get install unzip

 # yum install unzip





압축을 해제했다면 생성된 CodeIgniter 디렉토리의 파일


아파치 서버의 실행 파일 경로로 전부 이동시킨다.


 sudo cp -R /CodeIgniter(압축해제 디렉토리 이름)/* /아파치 서버의 실행 파일 경로

 sudo cp -R /var/www/html/CodeIgniter-3.1.10/* /var/www/html/




코드이그나이터의 설치가 완료되었다면


브라우저를 통해 해당 서버의 IP주소 혹은 도메인( localhost )으로 접속해 보면 아래와 같은 출력결과가 나타나는 것을 확인 할 수 있다.





위와 같은 화면이 나타난다면 모든 코드이그나이터의 설치는 정상적으로 된것이다.










■ Hello World 페이지 만들기




#01. 주소체계 파악하기



Welcome to CodeIgniter 라는 메세지가 브라우저 화면에 정상적으로 출력되었지만


주소입력창에 호스트 및 도메인주소만 입력했는데 특정 컨트롤러가 실행되고, 어떤 뷰가 화면에 출력되었다.


이런 역할을 해주는 것이 /application/config/routes.php 에 존재한다.



 설치경로/application/config/routes.php

<?php

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


/* 주 석 생 략 */


$route['default_controller'] = 'welcome';      // Welcome.php 컨트롤러를 실행한다.

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

$route['translate_uri_dashes'] = FALSE;



주소에 컨트롤러가 입력되지 않았을 경우 welcome.php 컨트롤러가 실행된다.



 설치경로/application/controller/Welcome.php

<?php

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


class Welcome extends CI_Controller {

/* 주 석 생 략  */


public function index( )

{

$this->load->view('welcome_message');      // welcome_message.php 파일을 실행한다.

}

}





CodeIgniter의 주소체계는 http:// 호스트 / 컨트롤러 / 메서드로 되어 있다.


routes.php에서 default_controllerwelcome.php로 지정해서 컨트롤러 명을 알 수 있는데 실행되는 메서드 명은 알 수가 없다.


index( ) 메서드를 선언하려면 http://localhost/welcome/까지만 주소를 쳐도 자동으로 http://localhost/welcome/index라고 실행된다.

(에러 방지의 목적도 있기 때문에 index 메서드는 항상 만드는 것이 좋다.)


$this->load->view는 뷰 파일을 로딩하라는 의미이다.


/application/views/welcome_message.php 파일이 로딩되며, 확장자는 생략하고 호출된다.





#02. Hello World 출력하기



Hello World를 화면에 출력하기 위해


/application/views/welcome_message.php 파일의


내용을 아래와 같이 수정해 보자.


 설치경로/application/view/welcome_message.php

<?php

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

?><!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8">

<title>Welcome to CodeIgniter</title>


<style type="text/css">


::selection { background-color:#E13300;color:white; }

::-moz-selection { background-color:#E13300;color:white; }


body {

background-color:#FFFFFF;

margin:40px;

font:13px/20px normal Helvetica,Arial,sans-serif;

color:#4F5155;

}


a {

color:#003399;

background-color:transparent;

font-weight:normal;

}


h1 {

color:#444444;

background-color:transparent;

border-bottom:1px solid #D0D0D0;

font-size:19px;

font-weight:normal;

margin:0 0 14px 0;

padding:14px 15px 10px 15px;

}


code {

font-family:Consolas, Monaco, Courier New, Courier, monospace;

font-size:12px;

background-color:#F9F9F9;

border:1px solid #D0D0D0;

color:#002166;

display:block;

margin:14px 0 14px 0;

padding:12px 10px 12px 10px;

}


#body {

margin: 0 15px 0 15px;

}


p.footer {

text-align:right;

font-size:11px;

border-top:1px solid #D0D0D0;

line-height:32px;

padding:0 10px 0 10px;

margin:20px 0 0 0;

}


#container {

margin:10px;

border:1px solid #D0D0D0;

box-shadow:0 0 8px #D0D0D0;

}

</style>

</head>

<body>

<!--

<div id="container">

<h1>Welcome to CodeIgniter!</h1>


<div id="body">

<p>The page you are looking at is being generated dynamically by CodeIgniter.</p>


<p>If you would like to edit this page you'll find it located at:</p>

<code>application/views/welcome_message.php</code>


<p>The corresponding controller for this page is found at:</p>

<code>application/controllers/Welcome.php</code>


<p>If you are exploring CodeIgniter for the very first time, you should start by reading the <a href="user_guide/">User Guide</a>.</p>

</div>

</div>

-->


<!-- 수 정 시 작 -->

<!-- 뷰 파일은 HTML로 구성되어 있어서 일정한 규칙을 개발자와 디자이너가 준수한다면 디자인 분업이 가능하다. -->

<div id="container">

<h1>Hello World</h1>

<div id="body">

<p>CodeIgniter 설치후 볼 수 잇는 화면 입니다.</p>

</div>


<p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds. 

<?php 

echo  (ENVIRONMENT === "development") ?  "CodeIgniter Version <strong>" . CI_VERSION . "</strong>" : ""

?>

</p>

</div>

<!-- 수 정 종료 -->

</body>

</html>



자동으로 로딩되는 output 라이브러리의 변수 중 하나로 { elapsed_time }은 현재 보이는 페이지의 실행 시간을 나타낸다.


어떤 페이지든 { elapsed_time } 를 삽입하면 그 페이지의 실행 시간을 보여준다.


비슷한 변수로 그 페이지 사용량을 보여주는 { memory_usage } 가 있다.














Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기