반응형
뉴스 섹션
출처:
http://ci4doc.cikorea.net/tutorial/news_section.html
뉴스섹션은 데이터 베이스를 연결하고 데이터 베이스에 등록된 내용을 출력하는 페이지
데이터 베이스 생성
여기서는 mysql을 default로 이용함
# 1. mysql에 사용자 계정 추가
GRANT ALL privileges ON DB명.* TO 계정명@localhost IDENTIFIED BY '비밀번호';
#2. 데이터 베이스 생성
create database ci4 default character set utf8;
#3. 테이블 생성
CREATE TABLE news (
id int(11) NOT NULL AUTO_INCREMENT,
title varchar(128) NOT NULL,
slug varchar(128) NOT NULL,
body text NOT NULL,
PRIMARY KEY (id),
KEY slug (slug)
);
#4. 시드 레토드 등록
INSERT INTO news VALUES
(1,'Elvis sighted','elvis-sighted','Elvis was sighted at the Podunk internet cafe. It looked like he was writing a CodeIgniter app.'),
(2,'Say it isn\'t so!','say-it-isnt-so','Scientists conclude that some programmers have a sense of humor.'),
(3,'Caffeination, Yes!','caffeination-yes','World\'s largest coffee shop open onsite nested coffee shop for staff only.');
데이터베이스에 연결
.env 파일이나 또는 app/Config/Database.php 파일을 수정하여 데이터베이스에 연결
여기서는 .env 파일을 수정하여 연결함
.env
#--------------------------------------------------------------------
# DATABASE
#--------------------------------------------------------------------
database.default.hostname = localhost
database.default.database = ci4
database.default.username = 계정명
database.default.password = 비밀번호
database.default.DBDriver = MySQLi
model 설정
app/Models/NewsModel.php
<?php
namespace App\Models;
use CodeIgniter\Model;
class NewsModel extends Model
{
protected $table = 'news';
public function getNews($slug = false)
{
if ($slug === false) {
//findAll() 모든 결과를 반환
return $this->findAll();
}
// where($key[, $value = NULL[, $escape = NULL]]) 쿼리빌더 클래스
// 쿼리의 WHERE 부분을 생성
// Parameters:
// $key (mixed) – 비교할 필드 이름 또는 연관 배열
// $value (mixed) – 단일 키인 경우 이 값과 비교
// $escape (bool) – 값과 식별자를 이스케이프할지 여부
// Returns:BaseBuilder instance
// Return type: object
//asArray() find*() 메소드의 데이터를 연관 배열로 리턴
//first() 결과 집합의 첫 번째 행을 반환
return $this->asArray()
->where(['slug' => $slug])
->first();
}
}
protected $table = 'news'; 선언에 의하여 해당 모델의 기본 테이블은 news가 된다.
controller 설정
app/Controllers/News.php
<?php
namespace App\Controllers;
use App\Models\NewsModel;
use CodeIgniter\Controller;
class News extends Controller
{
public function index()
{
$model = new NewsModel();
$data = [
'news' => $model->getNews(),
'title' => 'News archive',
];
echo view('templates/header', $data);
echo view('news/overview', $data);
echo view('templates/footer', $data);
}
public function view($slug = null)
{
$model = new NewsModel();
$data['news'] = $model->getNews($slug);
if (empty($data['news'])) {
throw new \CodeIgniter\Exceptions\PageNotFoundException('Cannot find the news item: ' . $slug);
}
$data['title'] = $data['news']['title'];
echo view('templates/header', $data);
echo view('news/view', $data);
echo view('templates/footer', $data);
}
}
view 설정
app/Views/news 디렉토리를 생성한후 overview.php 파일과 view.php 파일을 생성
app/Views/news/overview.php
<h2><?= esc($title); ?></h2>
<?php if (!empty($news) && is_array($news)) : ?>
<?php foreach ($news as $news_item) : ?>
<h3><?= esc($news_item['title']); ?></h3>
<div class="main">
<?= esc($news_item['body']); ?>
</div>
<p><a href="/news/<?= esc($news_item['slug'], 'url'); ?>">View article</a></p>
<?php endforeach; ?>
<?php else : ?>
<h3>No News</h3>
<p>Unable to find any news for you.</p>
<?php endif ?>
app/Views/news/view.php
<h2><?= esc($news['title']); ?></h2>
<?= esc($news['body']); ?>
라우팅
app/Config/Routes.php 파일을 수정하여 라우팅설정을 한다.
/**
* --------------------------------------------------------------------
* Route Definitions
* --------------------------------------------------------------------
*/
// We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', 'Home::index');
$routes->get('news/(:segment)', 'News::view/$1');
$routes->get('news', 'News::index');
$routes->get('(:any)', 'Pages::view/$1');
'CI4' 카테고리의 다른 글
[코드이그나이터] 어플리케이션 구조 (0) | 2020.09.01 |
---|---|
[코드이그나이터] [첫번째 어플리케이션 제작(튜터리얼)] 뉴스 아이템 만들기 [데이터 등록 페이지] (0) | 2020.08.31 |
[코드이그나이터] [첫번째 어플리케이션 제작(튜터리얼)] 정적 페이지 (0) | 2020.08.28 |
[코드이그나이터] 라우팅 (0) | 2020.08.28 |
[코드이그나이터] 사용자 정의 예외 (0) | 2020.08.28 |