DAY29
DAY29

연결 설정

1. 호스트 전용 상태에서 ci4.st.kr로 접속되도록 할것
host-only
dns 192.168.56.102

2. 메인 pc에 워크벤치 설치해서 접속되도록 조치할것
ci4/ci4.st.kr/ci4

테이블 추가
CREATE TABLE news (
    idx int(11) NOT NULL AUTO_INCREMENT,
    title varchar(128) NOT NULL,
    slug varchar(128) NOT NULL,
    body text NOT NULL, 
    reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (idx),
    KEY slug (slug)
);

테이블 내용 삽입
*slug : 페이지나 포스트를 설명하는 몇개 단어의 집합
INSERT INTO news VALUES
(1,'October','새로운 진로를 생각함','교수님께 갑작스럽게 연락했는데 2024년 제일 잘 한 일로 꼽힌다'),
(2,'November','인터넷 보안 전문가 시험 준비','기출을 열심히 암기해서 필기에서 좋은 성적을 받았다'),
(3,'December','산대특 화이트해커 국비 교육을 수강','어렵지만 열심히 하는중ㅜㅜ');
(4,'January','계엄령 시 해야할 일을 검색하려고 chat GPT를 처음 써봄','서울의 봄 영화를 다시 넷플릭스로 볼 정도로 충격이었다!!'),
(5,'','',''),
(6,'','',''),
(7,'','',''),
(8,'','',''),
(9,'','',''),
(10,'','',''),
(11,'','','');

Bootstrap Example

ci4.st.kr


app > config > routes.php에 추가
$routes->match(['get', 'post'], 'news/create', 'News::create');
$routes->get('news/(:segment)', 'News::view/$1'); #news의 1번 선택
$routes->get('news', 'News::index'); #news만 치면 목록 다 나옴

app > controllers > home.php 내용을 News.php에 복붙 후 이름 News로 바꾸기
< ?php

namespace App\Controllers;

class Home extends BaseController
{
    public function index(): string
    {
        return view('news/list');
    }
}

app > views
디렉토리 News 생성
list.php 생성

/static파일 확인 및 경로 변경

*서버 설정
xshell
nano .env 주석해제(테스트주석아님)
 database.default.hostname = localhost
 database.default.database = ci4
 database.default.username = ci4   
 database.default.password = 123456
 database.default.DBDriver = MySQLi
 database.default.DBPrefix =
 database.default.port = 3306

app > config > database.php(서버(mysql)랑 맞추기)
mysql
ci4 비밀번호 12345 > 123456으로 변경하기
ALTER USER 'ci4'@'localhost' IDENTIFIED BY '123456';

app > models > NewsModel.php 수정
(ci4에서는 sql이 없어지고 findall로 데이터를 가져온다!!)
< ?php
	namespace App\Models;
	use CodeIgniter\Model;

class AuthModel extends Model
{
	protected $table = 'news';
	protected $allowedFields = ['title', 'slug', 'body'];
	public function getNews($slug = false)
	{
		if ($slug === false) {
        return $this->findAll();
        }
        return $this->where(['slug' => $slug])->first(); #만약 slug값이 없으면 다 가져온다(findall)
    }
}
*데이터베이스 가져오기
(getNews(데이터베이스 가져옴 > findall 작동) //Model은 Controller가 요청할 때 동작한다(자체적 동작 안함))
$news as $news_item (뉴스의 별명은 뉴스_아이템)
내용대신 붙이기
< ?= esc($news_item['idx']) ?>
< ?= esc($news_item['title']) ?>
< ?= esc($news_item['slug']) ?>
< ?= esc($news_item['body']) ?>

***에디트 플러스 ftp 오류
해결 => 도메인 작동되는지 확인 후 안되면 ip로 접속

*include 대신 반복문 사용하기
include __DIR__ . "/includes/db.php";
$sql = "";

혹은 

sql_in=[,,,,,,]
for sql_in in sql_in:

사용했으나 ci4에서는 list를 사용한다.
(list는 무조건 반복된다 -> 반복되는 코드 필요)
*반복문 만들기
	< ?php if (! empty($news) && is_array($news)): ?>

		< ?php foreach ($news as $news_item): ?>

      < tr>
        < td>Mary
        < td>Moe
        < td>mary@example.com
		< td>날짜
      < /tr>

    < ?php endforeach ?>

< ?php else: ?>
	< tr>
		< td colspan=3>데이터가 없습니다.
	< /tr>
< ?php endif ?>

$title을 쓰고 싶은 경우
app > controller > News.php
use App\Models\NewsModel;
< ?= esc($title) ?>
$title은 controllers에서 가져오는데 
'title'안의 내용을 바꿔서 다른 걸로 쓸 수도 있고 가져오는 내용(=> '뉴스보기')을 수정할 수도 있다!
view기능 안에 적혀있으므로 view페이지에서만 바뀜


< td>< a href="/news/< ?= esc($news_item['idx']) ?>">< ?= esc($news_item['slug']) ?>< /a>< /td>
//idx를 연결 페이지 경로로 하고 제목은 slug내용으로 한다...

*등록 버튼 만들기
anchor 모양 버튼 누르기

***TIP. 중요한 항목들 
config > routes.php
controller > News.php
view > news > list.php/view.php/create.php
model > newsmodel.php