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,'','','');
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