Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on May 7, 2026. It is now read-only.

CodeIgniter Rest API 설정하기

INMD1 edited this page Nov 13, 2024 · 2 revisions

Model 파일 설정하기

우리가 DB에 접속해서 DB의 내용을 가져오거나 변경할 하기 위해서는 1차 적으로 Model 파일에 정의를 먼저 해줘야 한다

예시로 로그인 페이지를 만드는걸 참조 하겟다.

API 폴더에 파일 생성

API 폴더 안에 UserModel.php 하나를 생성한다.

<?php
namespace App\Models;
use CodeIgniter\Model;
class UserModel extends Model
{
 protected $table = 'users';
 protected $primaryKey = 'id';
 protected $allowedFields = ['email', 'name', 'phone_number', 'student_id', 'username', 'password'];
 protected $useTimestamps = true;
 protected $dateFormat = 'datetime';
 protected $createdField = 'created_at';
 protected $updatedField = 'updated_at';
 protected $beforeInsert = ['hashPassword'];
 protected $beforeUpdate = ['hashPassword'];
 protected function hashPassword(array $data)
 {
 if (isset($data['data']['password'])) {
 $data['data']['password'] = password_hash($data['data']['password'], PASSWORD_DEFAULT);
 }
 return $data;
 }
}

Controllers 설정하기

우리가 마이크레이션을 하고 모델을 정의 햇으면 다음 단계인 컨트롤러에서 AuthController.php파일을 생성하고 수정한다. -> 아래코드는 우리가 로그인할대 JWT를 발급해서 인증관리 해주는 코드이다.

<?php
namespace App\Controllers;
use App\Models\UserModel;
use CodeIgniter\RESTful\ResourceController;
use Firebase\JWT\JWT;
class AuthController extends ResourceController
{
 public function register()
 {
 $rules = [
 'email' => 'required|valid_email|is_unique[users.email]',
 'name' => 'required',
 'phone_number' => 'required',
 'student_id' => 'required|is_unique[users.student_id]',
 'username' => 'required|is_unique[users.username]',
 'password' => 'required|min_length[6]',
 ];
 if (!$this->validate($rules)) {
 return $this->fail($this->validator->getErrors());
 }
 $model = new UserModel();
 $data = [
 'email' => $this->request->getVar('email'),
 'name' => $this->request->getVar('name'),
 'phone_number' => $this->request->getVar('phone_number'),
 'student_id' => $this->request->getVar('student_id'),
 'username' => $this->request->getVar('username'),
 'password' => $this->request->getVar('password'),
 ];
 $user_id = $model->insert($data);
 $data['id'] = $user_id;
 unset($data['password']);
 return $this->respondCreated($data);
 }
 public function login()
 {
 $model = new UserModel();
 $username = $this->request->getVar('username');
 $password = $this->request->getVar('password');
 $user = $model->where('username', $username)->first();
 if (!$user || !password_verify($password, $user['password'])) {
 return $this->failUnauthorized('Invalid credentials');
 }
 $key = getenv('JWT_SECRET');
 $payload = [
 'iat' => time(),
 'exp' => time() + 3600,
 'uid' => $user['id'],
 'email' => $user['email'],
 ];
 $token = JWT::encode($payload, $key, 'HS256');
 return $this->respond(['token' => $token]);
 }
}

그다음 사용자 정보 관리 API를 추가합니다. 파일명은 UserController.php

<?php
namespace App\Controllers;
use App\Models\UserModel;
use CodeIgniter\RESTful\ResourceController;
class UserController extends ResourceController
{
 protected $model;
 public function __construct()
 {
 $this->model = new UserModel();
 }
 public function index()
 {
 $users = $this->model->findAll();
 return $this->respond($users);
 }
 public function show($id = null)
 {
 $user = $this->model->find($id);
 if (!$user) {
 return $this->failNotFound('User not found');
 }
 return $this->respond($user);
 }
 public function update($id = null)
 {
 $user = $this->model->find($id);
 if (!$user) {
 return $this->failNotFound('User not found');
 }
 $data = $this->request->getJSON();
 if (!$this->model->update($id, $data)) {
 return $this->fail($this->model->errors());
 }
 return $this->respond($this->model->find($id));
 }
 public function delete($id = null)
 {
 $user = $this->model->find($id);
 if (!$user) {
 return $this->failNotFound('User not found');
 }
 if ($this->model->delete($id)) {
 return $this->respondDeleted(['id' => $id]);
 }
 return $this->fail('Failed to delete the user');
 }
}

라우트 설정

우리가 이때까지 설정한 것들을 라우터에서 설정해서 데이터가 잘 처리되게 만든다

$routes->post('register', 'AuthController::register');
$routes->post('login', 'AuthController::login');
$routes->group('users', ['filter' => 'auth'], function($routes) {
 $routes->get('', 'UserController::index');
 $routes->get('(:num)', 'UserController::show/1ドル');
 $routes->put('(:num)', 'UserController::update/1ドル');
 $routes->delete('(:num)', 'UserController::delete/1ドル');
});

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /