반응형
뉴스 아이템 만들기 [데이터 등록]
출처:
http://ci4doc.cikorea.net/tutorial/create_news_items.html
뉴스 아이템 만들기는 폼페이지를 제작하고 입력값을 테이블에 저장 하는 페이지를 생성함
form 생성
app/Views/news/create.php
<h2><?= esc($title); ?></h2>
<?= \Config\Services::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"></textarea><br />
<input type="submit" name="submit" value="Create news item" />
</form>
\Config\Services::validation()->listErrors()는 오류검증시 관련된 오류를 보고 하는데 사용함
csrf_field() CSRF 토큰을 이용하여 일반적인 공격으로 부터 보호하는 기능을 함
controller 설정
app/Controllers/News.php
public function create()
{
$model = new NewsModel();
//유효성 검증
// getMethod([$upper = FALSE])
// Parameters:
// $upper (bool) – 요청 메소드 이름을 대문자 또는 소문자로 반환할지 여부
// Returns: HTTP 요청 방법(request method) 예 get,post
// Return type: string
// validate($rules, array $messages = [])
// 입력 데이터의 유효성을 검증함 만약 유효성 검증을 실패할경우 error 속성이 부여됨
// Parameters:
// $rules (array|string) 유효성 규칙
// $messages (array) 사용자 지정 에러메세지의 배열
// Return type: boolean
if ($this->request->getMethod() === 'post' && $this->validate([
'title' => 'required|min_length[3]|max_length[255]',
'body' => 'required'
])) {
// 데이터 등록
// url_title($str[, $separator = '-'[, $lowercase = FALSE]]) URL HELPER
// 문자열을 입력으로 받아서 사람에게 친숙한 URL 문자열 생성
// Parameters:
// $str (string) – 입력 문자열
// $separator (string) – 단어 구분 기호
// $lowercase (bool) – 출력 문자열을 소문자로 변환할지 여부
// Returns: URL-formatted 문자열
// Return type: string
// 예:
// $title = "What's wrong with CSS?";
// $url_title = url_title($title);
// Produces: Whats-wrong-with-CSS
$model->save([
'title' => $this->request->getPost('title'),
'slug' => url_title($this->request->getPost('title'), '-', TRUE),
'body' => $this->request->getPost('body'),
]);
echo view('news/success');
} else {
//유효성 검증시 오류가 발생할경우 등록폼 노출
echo view('templates/header', ['title' => 'Create a news item']);
echo view('news/create');
echo view('templates/footer');
}
}
CI3 에서는 GET,POST 값을 가져올 경우 $this->input->post('필드명'), $this->input->get('필드명')을 이용하였으나 CI4 에서는 $this->request->getPost('필드명'), $this->request->getGet('필드명')을 이용
성공 페이지 생성
app/Views/news/success.php 생성
News item created successfully.
model 업데이트
app/Models/NewsModel.php
<?php
namespace App\Models;
use CodeIgniter\Model;
class NewsModel extends Model
{
protected $table = 'news';
//업데이트 가능한 필드 목록을 지정
protected $allowedFields = ['title', 'slug', 'body'];
public function getNews($slug = false)
{
if ($slug === false) {
return $this->findAll();
}
return $this->asArray()
->where(['slug' => $slug])
->first();
}
}
라우팅
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->match(array $verbs = [], string $from, $to, array $options = null): RouteCollectionInterface
// Example:
// $route->match( ['get', 'post'], 'users/(:num)', 'users/$1);
// Parameters:
// $verbs array
// $from string
// $to string|array
// $options array|null
// $verbs 배열항목 중 HTTP Verbs 가 일치한 경우 해당 라우팅 규칙에 따라 처리가 되도록 하는 메서드
// HTTP Method(HTTP Verbs) 데이터를 보내는 방식을 표시해주는 역할을 함
// 종류: GET, POST, PUT, PATCH, DELETE
$routes->match(['get', 'post'], 'news/create', 'News::create');
$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.09.01 |
[코드이그나이터] [첫번째 어플리케이션 제작(튜터리얼)] 뉴스 섹션 (0) | 2020.08.31 |
[코드이그나이터] [첫번째 어플리케이션 제작(튜터리얼)] 정적 페이지 (0) | 2020.08.28 |
[코드이그나이터] 라우팅 (0) | 2020.08.28 |