일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 객체지향
- 제이펍 출판
- 제이쿼리연결
- 맥 mysql
- 맥 아파치
- 닐 스미스 지음
- 자바스크립트
- python tkinter 인터페이스
- 황반석 옮김
- 생활코딩
- 객체
- 한글입력 잘림
- max MySQL
- 한글잘림
- 자바스크립트 class
- 기획자랑 사이좋게 지내고 싶다
- 한글입력 안됨
- 블록 스코프
- 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍
- python GUI 사용하기
- jquery 사용하기
- SwiftUI 기반의 iOS 프로그래밍
- 자바스크립트 객체 만들기
- max apache
- 한글입력 씹힘
- 한글입력 오류
- 자바스크립트 객체
- 자바스크립트 배열 할당
- 비주얼스튜디오 코드
- 배열 분해 할당
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 객체지향
- 제이펍 출판
- 제이쿼리연결
- 맥 mysql
- 맥 아파치
- 닐 스미스 지음
- 자바스크립트
- python tkinter 인터페이스
- 황반석 옮김
- 생활코딩
- 객체
- 한글입력 잘림
- max MySQL
- 한글잘림
- 자바스크립트 class
- 기획자랑 사이좋게 지내고 싶다
- 한글입력 안됨
- 블록 스코프
- 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍
- python GUI 사용하기
- jquery 사용하기
- SwiftUI 기반의 iOS 프로그래밍
- 자바스크립트 객체 만들기
- max apache
- 한글입력 씹힘
- 한글입력 오류
- 자바스크립트 객체
- 자바스크립트 배열 할당
- 비주얼스튜디오 코드
- 배열 분해 할당
- Today
- Total
java,javascript,android,php,sql,공부용,메모용
코드이그나이터4 CI4 MVC 패턴 Model 데이터베이스 라이브러리 로드하기 본문
데이터베이스 생활코딩에 있음
https://opentutorials.org/module/327/3827
생활코딩 보고 공부한것
# 데이터베이스 추가
CREATE DATABASE opentutorials CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
# 데이터베이스 접속
use opentutorials;
# 테이블 추가
CREATE TABLE topic (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(255) NOT NULL ,
description text NULL ,
created datetime NOT NULL ,
PRIMARY KEY (id)
);
# 내용 추가
INSERT INTO `topic` (title,description,created) VALUES ('JavaScript란', '<h2>\r\n 자바스크립트는</h2>\r\n<ul>\r\n <li>\r\n 브라우저에서 실행되는 언어</li>\r\n <li>\r\n 가장 많이 사용되는 언어</li>\r\n <li>\r\n 주로 html을 프로그래밍적으로 조작하기 위해서 사용됨</li>\r\n</ul>\r\n<h2>\r\n 예제</h2>\r\n<ul>\r\n <li>\r\n 자바스크립트는 3가지 방식으로 사용됨</li>\r\n <li>\r\n 외부의 파일을 로드</li>\r\n <li>\r\n <script>태그 사이에 기술</li>\r\n <li>\r\n 태그에 직접 기술</li>\r\n</ul>\r\n<h2>\r\n 참고링크</h2>\r\n<ul>\r\n <li>\r\n <a href=\"http://www.maroon.pe.kr/webmaster/java/java_study.html\" target=\"_blank\">스크립트 세상</a></li>\r\n <li> \r\n</ul>\r\n', now());
INSERT INTO `topic` (title,description,created) VALUES ('변수와 상수', '<p>\r\n 변수란</p>\r\n<ul>\r\n <li>\r\n 변하는 값</li>\r\n <li>\r\n x = 10 일 때 왼쪽항인 x는 오른쪽 항인 10에 따라 다른 값이 지정된다.</li>\r\n</ul>\r\n<p>\r\n 상수란</p>\r\n<ul>\r\n <li>\r\n 변하지 않는 값</li>\r\n <li>\r\n x = 10 일 때 오른쪽항인 10이 상수가 된다.</li>\r\n</ul>\r\n<pre class=\"brush: xml\">\r\n<script type="text/javascript">\r\n // x의 값이 오른쪽 항에 따라서 변한다.\r\n // x가 변수라는 명시적인 의미\r\n var x = 10;\r\n alert(x);\r\n var x = 20;\r\n alert(x);\r\n</script></pre>\r\n<p>\r\n </p>\r\n', now());
INSERT INTO `topic` (title,description,created) VALUES ('연산자', '<p>\r\n 연산에 사용되는 기호들. (y = 5 일 때)</p>\r\n<table class=\"table\">\r\n <tbody>\r\n <tr>\r\n <th align=\"left\" width=\"15%\">\r\n Operator</th>\r\n <th align=\"left\" width=\"40%\">\r\n Description</th>\r\n <th align=\"left\" width=\"25%\">\r\n Example</th>\r\n <th align=\"left\" width=\"20%\">\r\n Result</th>\r\n </tr>\r\n <tr>\r\n <td valign=\"top\">\r\n +</td>\r\n <td valign=\"top\">\r\n 더하기</td>\r\n <td valign=\"top\">\r\n x=y+2</td>\r\n <td valign=\"top\">\r\n x=7</td>\r\n </tr>\r\n <tr>\r\n <td valign=\"top\">\r\n -</td>\r\n <td valign=\"top\">\r\n 빼기</td>\r\n <td valign=\"top\">\r\n x=y-2</td>\r\n <td valign=\"top\">\r\n x=3</td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n', now());
INSERT INTO `topic` (title,description,created) VALUES ('JSON', '<h2>JSON이란?</h2>\r\n\r\n<p>서로 다른 언어들간에 데이터를 주고 받는 여러 방법이 있다. 대표적인 것이 XML인데, XML은 문법이 복잡하고, 엄격한 표현규칙으로 인해서 json 대비 데이터의 용량이 커진다는 단점이 있다.</p>\r\n\r\n<p>JSON은 경량의 데이터 교환 형식으로 JavaScript에서 숫자와 배열등을 만드는 형식을 차용해서 이것을 다른 언어에서도 사용할 수 있도록 한 텍스트 형식이다. </p>\r\n\r\n<p>아래 예제는 위의 예제에서 전송한 데이터를 받아서 몇가지 부가정보를 추가해서 json으로 인코드한 후에 다시 반환하는 PHP 코드다. </p>\r\n\r\n<p>json.php - (<a href=\"https://github.com/egoing/codingeverybody_javascript/blob/master/JSON/json.php\" target=\"_blank\">github</a>)</p>\r\n\r\n<pre class=\"brush: php\">\r\n<?php\r\n$userinfo = json_decode($_GET['data']);\r\n$userinfo->address = 'seoul';\r\n$userinfo->phonenumber = '01023456789';\r\necho json_encode($userinfo);\r\n?></pre>\r\n\r\n<h2>json의 형식</h2>\r\n\r\n<h3>object</h3>\r\n\r\n<p>객체는 아래와 같은 문법을 가지고 있다.</p>\r\n\r\n<p>예제</p>\r\n\r\n<p>{"userid":"egoing","pwd":"12345567"}</p>\r\n\r\n<p><img height=\"113\" src=\"http://www.json.org/object.gif\" width=\"598\" /></p>\r\n\r\n<h3>array</h3>\r\n\r\n<p>배열은 아래와 같은 문법을 가지고 있다. </p>\r\n\r\n<p>예제</p>\r\n\r\n<p>[1,2,3,4]</p>\r\n\r\n<p><img height=\"113\" src=\"http://www.json.org/array.gif\" style=\"line-height: 1.8em;\" width=\"598\" /></p>\r\n\r\n<h3>Value</h3>\r\n\r\n<p>위에서 사용된 Value는 값을 의미하는데 큰 따옴표로 묶인 문자나 숫자, 불린 값이 사용된다.</p>\r\n\r\n<p>예제</p>\r\n\r\n<ul>\r\n <li>문자 : "헬로우 월드"</li>\r\n <li>숫자 : 1</li>\r\n <li>불린 : true</li>\r\n</ul>\r\n\r\n<p><img height=\"278\" src=\"http://www.json.org/value.gif\" width=\"598\" /></p>\r\n', now());
# 테이블 검색 확인
SELECT * FROM topic;
* 오토로드 사용하기
CI3에서는 Autoload.php 에서
$autoload['libraries'] = array('database');를 작성하면 된다
CI4는 ???
* 컨트롤러에서 데이터베이스 라이브러리를 로드하는 방법 하기
1.
CI3 데이터베이스 로드
$this->load->database();
CI4 데이터베이스 로드
$db = db_connect();
2.
Models 폴더에 새파일 생성
CI4 새파일은 만들면 class 모델파일명 extends Model {} 해줘야함 약속
3. construct() 생성자 선언
컨스트럭트 초기화 함수 : 토픽 모델이 생성될때 생성자가 제일 먼저 실행됨
4. 리스트에 가져갈 gets 함수 생성
5. 컨트롤러에서 생성한 모델의 함수 gets 가져가기
6. 토픽의 클래스 인스턴스에 접속해서 함수 호출 (모델로)
$data = $topic_model->gets();
7. 데이터 가져오기
return $this->db->query('SELECT * FROM topic')->getResult(); //CI3에서 result()를 CI4에서 getResult()로 변경
//return $this->db->query('SELECT * FROM topic')->getResult();
// getResult() 는 객체의 형태로 담겨있다 (컨트롤러가기)
쿼리결과 생성 참고
http://ci4doc.cikorea.net/database/results.html
8. 내용을 표시해보기 주석풀어서 확인
// foreach($data as $entry){
// //var_dump($entry->title); //array X
// var_dump($entry);
// }
9. 현재 model에 데이터를 가져와서 컨트롤러에 $data안에 gets()불러온 상태
view('Main', array('topics'=>$data))
// 2번째 인자는 view에 전달하고자 하는 인자값이다
이 내용을 return 안에 작성
10. view 페이지
<h1>토픽 페이지 입니다.</h1>
<ul>
<?php
foreach($topics as $entry){
?>
<li><a href="../index.php/main/get/<?php echo $entry->id;?>"><?php echo $entry->title;?></a></li>
<?php
}
?>
</ul>
11. 자주 사용하는 list를 list페이지에도 보이고 보기 페이지에서도 list가 보이도록 변경 view를 하나 새로추가 topic_list 페이지 추가해서
거기에 view 파일 main.php의 리스트 내용을 잘라내기 복사
12. 컨트롤러 변경
$topics = $topic_model->gets();
$topic_list = view('topic_list', array('topics'=>$topics));
위코드로 gets();를 변경 해서 추가하고
return view('head')
.view('Main')
// 리스트 보여주기 를 추가
.$topic_list
.view('footer');
컨트롤러의 이과정을 get과 index에 추가함
Model - CodeIgniter
Model View가 표현을 담당한다면 Model은 데이터를 담당한다. 여기서 데이터란 주로 데이터베이스를 의미한다. 즉 데이터를 다루는 로직을 모델에 모아둬서 데이터와 뷰를 격리 시키는 것이다. 이를
opentutorials.org
Model - CodeIgniter
Model View가 표현을 담당한다면 Model은 데이터를 담당한다. 여기서 데이터란 주로 데이터베이스를 의미한다. 즉 데이터를 다루는 로직을 모델에 모아둬서 데이터와 뷰를 격리 시키는 것이다. 이를
opentutorials.org
전체 코드 및 공부과정 주석들
컨트롤러
<?php
namespace App\Controllers;
class Main extends BaseController
{
//중복되는 데이터베이스 로드 모델에서
// $db = db_connect();
// 모델가져오기
// $topic_model = model('Topic_model');
// protected $db;
// protected $topic_model;
public function __construct()
{
$db = db_connect();
}
public function index()
{
// 리스트1. 데이터베이스 로드 (모델로)
//$db = db_connect();
//$this->db = db_connect();
// 리스트5. 모델 불러오기 models폴더의Topic_modle.php 가져옴
$topic_model = model('Topic_model');
// 리스트6. 토픽의 클래스 인스턴스에 접속해서 함수 호출 (모델로)
// 리스트 보여주기
$topics = $topic_model->gets();
// 리스트8. 내용을 표시해보기 주석풀어서 확인
// foreach($data as $entry){
// //var_dump($entry->title); //array X
// var_dump($entry);
// }
$topic_list = view('topic_list', array('topics'=>$topics));
return view('head')
// 리스트9. 현재 model에 데이터를 가져와서 컨트롤러에 $data안에 gets()불러온 상태
.view('Main') // 2번째 인자는 view에 전달하고자 하는 인자값이다
// 리스트 보여주기
.$topic_list
.view('footer');
}
// CI4의 뷰는 이전과 매우 유사하지만 다르게 해석됩니다.
// CI3의 $this->load->view(x); 대신 return view(x);를 사용합니다.
function get($id){
// 보기1. 데이터베이스 로드 Topic_model
//$db = db_connect();
$topic_model = model('Topic_model');
// 보기 페이지에도 리스트 넣기
$topics = $topic_model->gets();
$topic_list = view('topic_list', array('topics'=>$topics));
$topic = $topic_model->get($id); //모델로
return view('head')
//.view('get', array('id'=>$id))
// 리스트 보여주기
.$topic_list
.view('get', array('topic'=>$topic))
.view('footer');
}
}
모델
<?php
use CodeIgniter\Database\Query;
use CodeIgniter\Model;
// 리스트2. 모델 생성 클래스 기본약속 쓰기
class Topic_model extends Model{
// 리스트3. 초기화 함수 construct() 생성자이고 파일이 실행되면 초기화 구문이 같이 실행
//protected $db;
function __construct()
{
parent::__construct();
//$this->db = db_connect();
}
// 리스트4. 리스트에 가져갈 gets 함수 만들기 (컨트롤러로가서 불러오기)
public function gets(){
//echo 'test';
// 리스트7. 데이터 가져오기
return $this->db->query('SELECT * FROM topic')->getResult(); //CI3에서 result()를 CI4에서 getResult()로 변경
//return $this->db->query('SELECT * FROM topic')->getResult();
// getResult() 는 객체의 형태로 담겨있다 (컨트롤러가기)
}
// 리스트 타고들어가면 보이는 보기페이지
// 보기2. get -> 컨트롤러로 topic_id 인자 넘기기
public function get($topic_id){
// CI3을 CI4 참고 http://ci4doc.cikorea.net/installation/upgrade_database.html?highlight=get_where
// 쿼리 빌더 클래스를 사용하려면 빌더
// $builder = $db->table('mytable');로 초기화해야
// $builder에서 쿼리를 실행할 수 있습니다.
// $this->db->get_where('mytable', array('id' => $id), $limit, $offset);를
// $builder->getWhere(['id' => $id], $limit, $offset);
$db = db_connect();
$builder = $db->table('topic');
return $builder->getWhere(['id'=>$topic_id])->getRow();
// 위 구문은 액티브레코드 라고 한다 ( 위 구문처럼 사용하면 sql 구문과 관계없이 편하게 사용이 가능하다.)
//return $this->db->query('SELECT * FROM topic WHERE id='.$topic_id);
// 와 같음
}
/*
- application/models/Topic_model.php 파일의 get 메소드
- 수정 전: get_where('topic', array('id'$topic_id))
- 수정 후: get_where('데이터명.topic', array('id'$topic_id))
$sql="select * from dd where...."; 형태가 익숙하면 그대로 쓰셔도 된다고 함.
대신 엑티브 레코드를 쓰게 되면 $sql로 처리할때보다 보안이 한층 강화.
sql injection에 대한 처리를 자동으로 처리
*/
}
?>
뷰 토픽리스트
<ul>
<?php
foreach($topics as $entry){
?>
<li><a href="/ci_web/public/main/get/<?php echo $entry->id;?>"><?php echo $entry->title;?></a></li>
<?php
}
?>
</ul>
<li><a href="/ci_web/public/main">토픽리스트</a></li>
'개발 > php' 카테고리의 다른 글
코드이그나이터4 CI4 MVC 디자인 패턴 시각화 (0) | 2023.01.23 |
---|---|
코드이그나이터4 index.php 죽이기라고 함 없애기 (0) | 2023.01.23 |
XAMPP 코드이그나이터4 로컬 설치 메인화면 확인하기 Whoops! 해결 (0) | 2023.01.22 |
코드이그나이터4 CI4 view url 연결 자동라우팅 설정 (0) | 2023.01.22 |
php / mac에서 php 코딩하기 / 로그인,회원가입 페이지 만들기 - 2 (0) | 2021.10.29 |