📘 Day 5 (2025.09.23.TUE) - 뉴스 아이템 만들기
🛡️ CSRF 필터 활성화
app/Config/Filters.php - 잘못된 경로 침입 필터링
<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
class Filters extends BaseConfig
{
public $methods = [
'post' => ['csrf'],
];
}
📝 Create a form
app/Views/news/create.php 생성
<h2><?= esc($title); ?></h2>
<?= session()->getFlashdata('error') ?>
<?= service('validation')->listErrors() ?>
<form action="/news/create" method="post">
<?= csrf_field() ?>
<label for="title">Title</label>
<input type="input" name="title" /><br />
<label for="body">Text</label>
<textarea name="body" cols="45" rows="4"></textarea><br />
<input type="submit" name="submit" value="Create news item" />
</form>
app/Views/news/success.php 생성
News item created successfully.
📰 News 컨트롤러
public function create()
{
$model = model(NewsModel::class);
if ($this->request->getMethod() === 'POST' && $this->validate([
'title' => 'required|min_length[3]|max_length[255]',
'body' => 'required',
])) {
$model->save([
'title' => $this->request->getPost('title'),
'slug' => url_title($this->request->getPost('title'), '-', true),
'body' => $this->request->getPost('body'),
]);
return view('news/success');
}
return view('templates/header', ['title' => 'Create a news item'])
. view('news/create')
. view('templates/footer');
}
🛠️ 모델 업데이트
app/Models/NewsModel.php
<?php
namespace App\Models;
use CodeIgniter\Model;
class NewsModel extends Model
{
protected $table = 'news';
protected $allowedFields = ['title', 'slug', 'body'];
}
🌐 라우팅
app/Config/Routes.php
$routes->match(['get', 'post'], 'news/create', 'News::create');
$routes->get('news/(:segment)', 'News::view/$1');
$routes->get('news', 'News::index');
$routes->get('pages', 'Pages::index');
$routes->get('(:segment)', 'Pages::view/$1');
📷 실행 화면