PHP

PHP } 코드 이그나이터 스터디 210731-

Khookie 2021. 7. 31. 23:19

# 이그나이터

CodeIgniter PHP 기반의 MVC 프레임워크

개발자의 자유도가 높은 프레임워크로 MVC를 처음 시작하는 사람들에게도 적합

상대적으로 쉽고 가벼운 프레임워크

js,css 삽입

속도 빠름

 

# 주의

- Namespace를 지원 안

- 기본적으로 지원하는 라이브러리의 기능에 한계

- url이 이 컨트롤러에 의해 결정

 

# 서버 요구사항

PHP 버전 7.3 이상이 필요

*intl* 확장(Extension) *mbstring* 확장이 설치되어 있어야 함.

“curl”및 “intl”을 활성화 하려면 php.ini “extension” 줄의 주석을 제거해야합니다.

# 설치방법

 

CodeIgniter 설치 - 생활코딩

​​설치를 시작하기 전에 준비 사항 CodeIgniter를 사용하기 전에 아래와 같은 사항들이 미리 준비되어 있어야 한다. 이것들을 설치하는 방법은 생활코딩 웹서비스 만들기 실습편을 보거나, Apache

opentutorials.org

1. PHP, MYSQL , 웹서버 설치

2. 코드이그나이터 설치

코드이그나이터 홈에서 다운로드

https://www.codeigniter.com/download

htdocs 폴더 안의 내용을 모두 지움

 

3. 압축해제

웹서버의 Document ROOT로 이동해서 압축을 해제한다.

(HTDOCS 밑 을 말함, 서버에서 사용할 시 서버에 업로드 . ) zip 파일은 지우고 내용물만 있으면 된다

( 일반적으로 index.php 가 홈페이지 루트에 오도록 해야 한다.)

4. localhost  또는 서버로 접속하여 이그나이터 페이지가 나오면 성공

 

# 초기설정

- application/config/config.php 파일을 열어 기반url(base URL)을 세팅한다.

- 암호화나 세션을 사용하려면 암호키(encryption key)를 설정한다.

- 데이터베이스를 사용한다면 application/config/database.php 파일을 열어서 데이터베이스 정보를 세팅한다.

 

 

# 참고할만한 링크

* [http://codeigniter.com/ CodeIgniter 공식 홈페이지]

* [https://cikorea.net/ CodeIgniter 한국 사용자 포럼 홈페이지]

* [http://ci4doc.cikorea.net/ CodeIgniter 4 한국어 도움말]

 

 

2013튜토리얼

https://opentutorials.org/course/697/3825

 

CodeIgniter 설치 - 생활코딩

​​설치를 시작하기 전에 준비 사항 CodeIgniter를 사용하기 전에 아래와 같은 사항들이 미리 준비되어 있어야 한다. 이것들을 설치하는 방법은 생활코딩 웹서비스 만들기 실습편을 보거나, Apache

opentutorials.org

 

 


보통  쿼리 스트링 url 과는 다른 세그먼트  기반 url 사용

출처 https://codeigniter-kr.org/user_guide_2.1.0/general/urls.html

 

도메인/컨트롤러클래스/펑션/변수의값

 

위사진 출처로 가면 

url에 확장자 추가하기, index.php 부분 지우기 방법이 나온다

메소드와 컨트롤러 등에 값을 줄때 쿼리스트링으로  사용하는 법도 나온다

 

 

기본 주소 http://localhost/ci/index.php/welcome

 


MVC 모델

 

 

controller


-컨트롤러 이름에 의해 url 이 결정 ,

-컨트롤러를 통해 웹페이지를 출력

- url 이 1대1로 매핑 된다 

도메인/index.php/파일명

-파일명은 컨트롤러를 상속한 클래스명과 일치해야함

-내부에 index 함수가 있는데 초기화 담당( url 끝에 추가 세그먼트가 없을때 호출됨)

-함수의 매개변수: url 세그먼트 

- 함수를 추가하면 그 함수는 또다른 url 주소가 되는것 

models


모델. 데이터베이스와 연동하여 사용하기 위한 클래스.

 

 

views :  뷰.
 


 뷰. 웹페이지 디자인 및 템플릿


https://cikorea.net/

 

CodeIgniter 한국사용자포럼

 

cikorea.net


https://gyuha.tistory.com/258

 

PHP Framework, CodeIgniter 시작하기. [1부]

지난번 포스티에서 PHP Framework를 비교 한적이 있습니다. 그 4개의 Framework중에서 제 마음에 드는건 CodeIgniter더 군요. 그리고 몇 일 공부 한 짧은 지식을 정리해 볼까 합니다. 프레임워크를 왜 사용

gyuha.tistory.com

이그나이터 디렉토리 살펴보기 내용이 나와있음

 

 


동작 개념

  1. index.php 는 프론트콘트롤러(front controller)로 동작하여 CI가 동작하기 위한 기반리소스들을 초기화 합니다.
  2. 라우터모듈(Routing)은 http 요청을 분석하여 어떤 동작을 해야할지를 결정합니다.
  3. 캐쉬파일이 있다면 그파일을 바로 브라우저로 보내고 일반적인 동작절차는 무시합니다.
  4. 보안모듈(Security)은 프로그램 컨트롤러가 로딩 되기전에 HTTP 요청및 어떤 사용자 전송데이터든지 모두 필터링합니다.
  5. 컨트롤러(Application controller)는 사용자 요청을 처리하기 위해 모델을 로드하고,코어라이브러리,플러그인,헬퍼 및 필요한 다른 리소스들을 로드 합니다.
  6. 최종적으로 뷰모듈(View)이 렌더링되어 브라우저로 전송됩니다. 캐싱이 활성화 되어있다면 먼저 캐쉬(Cashing)하여 다음번 요청에 사용할 수 있도록 합니다.

https://gyuha.tistory.com/259

 

PHP Framework, CodeIgniter 시작하기 [2부]

[1부]에 이어서 시작합니다. 4. CI 경로 설정하기. CI를 시작하기 위해서는 기본 경로를 설정해 줘야 합니다. system/application/config/config.php 파일을 열어서... 'base_url'을 아래와 같이 수정해 줍니다. $..

gyuha.tistory.com

위 링크 내용 참조 

 

초반 config 설정이 필요

 

콘트롤러 파일을 만들고 config 에서 컨트롤러로 지정해주기

 

 

컨트롤러 파일 형식

 

<?php
    class Helloworld extends Controller{
        function index()
        {
            $this->load->model('helloworld_model');

            $data['result'] = $this->helloworld_model->getData();
            $data['page_title'] = "CI Hello World App!";

            $this->load->view('helloworld_view',$data);
        }
    }
?>

 

$this->load->view('head');  이구문에서 head는 파일명인데 .php 안붙여도 알아서 인식

 

 index.php에서는 controller 페이지를 거쳐서 model과 view를 연결
$this->load->model('helloworld_model')을 불러서 db의 데이터를 제어하고,

 $this->load->view('helloworld_view', $data)를 통해서 view에 있는 html과 데이터을 출력

 

컨트롤러에 있는 펑션부(세그먼트)는 url 을 통해 변수를 받을 수 있으나

뷰에 있는 파일은 컨트롤러를 거쳐 불려지는데 그냥 url 만으론 못받고 

 $this->load->view('helloworld_view', $data)를

뷰의 두번째 인자로 들어간다, ( 뷰파일 펑션의 매개변수로 들어감)

뷰에서 사용할 변수가 많다면 연관배열로 넣어준다.. 

 

컨트롤러 내부

function get($id){

$this->load->view('head');

$this->load->view('get', array('id'=>$id)); 

 

 

}

 

모델 만들기

데이터 베이스 연결 후 데이터를 읽어오자

 

모델 디렉토리에 파일을 만들고

 

<?php
class Helloworld_model extends Model {

    function Helloworld_model()
    {
        // 모델 생성자 호출
        parent::Model();
    }
    
    function getData()
    {
        // data테이블의 모든 레코드를 불러 옴.
        $query = $this->db->get('data');
        
        if ($query->num_rows() > 0) //결과가 있으면
        {
            return $query->result();
        }else{
            show_error('Database is empty!');
        }
    }
}
?>

 

모델 클래스엔 db 객체가 있고 get()으로 레코드를 불러올 수 있음을 추측할 수 있다 

그후 값이 있으면 리절트를 반환 

 

 

controller 내에서 $this->load->database()를 호출

application/models 디렉토리 아래에 '모델명_model.php' 의 형식으로 파일을 만든다. 

테이블 하나당 모델 하나를 추천

 

아래는 컨트롤러 파일 

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Topic extends CI_Controller {
    function __construct() //생성자
    {       
        parent::__construct();
        $this->load->database();
        $this->load->model('topic_model');  //모델 파일 로드
    }
    function index(){        
        $this->load->view('head');
        $topics = $this->topic_model->gets(); //테이블 가져오는 함수 호출 //도메인/topic/gets로실행가능
        $this->load->view('topic_list', array('topics'=>$topics)); //뷰로 테이블 전달
        $this->load->view('main');
        $this->load->view('footer');
    }
    function get($id){        
        $this->load->view('head');
        $topics = $this->topic_model->gets();
        $this->load->view('topic_list', array('topics'=>$topics));
        $topic = $this->topic_model->get($id);
        $this->load->view('get', array('topic'=>$topic));
        $this->load->view('footer');
    }
}
?>

모델 파일

 

<?php
class Topic_model extends CI_Model {
 
    function __construct() //생성자 이곳에서 초기화
    {       
        parent::__construct();
    }
 
    function gets(){
        return $this->db->query("SELECT * FROM topic")->result(); //전체 조회 쿼리 실행 결과 리턴
    }
 
    function get($topic_id){
        return $this->db->get_where('topic', array('id'=>$topic_id))->row(); //아이디를 매개변수로 검색한 결과 리턴 
    }
}
'뷰 만들기

결과값을 보여줄 페이지

application 하부 뷰스 폴더에 파일을 만든다

 

<html>
    <head>
        <title><?=$page_title?></title>
    </head>
    <body>
        <?php foreach($result as $row):?> <!--리절트 값 하나(레코드)를 row로 분리 -->
        <h3><?=$row->title?></h3> <!--각 레코드의 칼럼 분리 -->
        <p><?=$row->text?></p>
        <br />
        <?php endforeach;?>
    </body>
</html>

컨트롤러에서 뷰를 부를때 썻던 data 의  page_title 과 result 를 사용한다

 

뷰는 중복되는 코드를 잘라서 파일을 따로 head footer 등으로 분리한 후

콘트롤러에서 차례로 로드 하여 사용

 

 

 

액티브 레코드를 쓰면 표준 sql 을 사용하기 때문에 다른 데이터베이스로 이식성이 좋아진다 

 

http://ci4doc.cikorea.net/