Laravel API 프로젝트 13단계 - 유저 생성 API

Route::post('/users', [UserController::class, 'createUser']);

 

routes/api.php 파일에 위의 코드를 추가해줍니다.

 

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;

class UserController extends Controller
{
    public function createUser(Request $request): Response
    {
        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => $request->password
        ]);

        $user->save();

        return response()->noContent(Response::HTTP_CREATED);
    }
}

 

laravel-api/app/Http/Controllers/UserController.php 파일에 createUser 메서드를 추가해줍니다.

User 모델을 만들고 save 메서드를 사용하여 DB에 저장합니다.

유저를 생성하는것이니 HTTP 상태 코드는 201로 내려줍니다.

 

여기서 주목할점은 유저 생성시 지정 컬럼이 name, email, password 3개 뿐이라는것인데요, 나머지 컬럼은 왜 지정하지 않았는지 설명드리겠습니다.

 

<?php

namespace App\Models;

// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for serialization.
     *
     * @var array<int, string>
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast.
     *
     * @var array<string, string>
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
        'password' => 'hashed',
    ];
}

 

laravel-api/app/Models/User.php 파일을 보시면 $fillable 이라는 변수가 있습니다.

이 변수에는 DB에 insert 가능한 컬럼명이 지정되어 있습니다.

 

$user 변수 생성시 email_verified_at, remember_token 컬럼을 지정해도 $fillable변수에 없기 때문에 null이 들어가게 됩니다.

 

Model class를 상속하면 created_at, updated_at 컬럼에 현재 시간으로 insert가 되기 때문에 따로 지정하지 않아도 됩니다.

(Authenticatable 별칭인 Illuminate\Foundation\Auth\User 파일 내용을 보면 Model class을 상속받고 있음)

created_at, updated_at  컬럼의 자세한 설정은 이 문서를 참고해주세요.

 

root@webgori-1:~# curl --location 'http://localhost/api/users' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "user",
    "email": "user@gmail.com",
    "password": "user"
}'

 

/api/users API 호출하면 유저가 생성됩니다.