본문 바로가기
IT/PHP

Laravel + vue : API(2)

by Sungjun_ 2021. 1. 19.

resources\views 폴더 안에 layouts 폴더를 만들고 app.blade.php 파일을 만들었습니다.

 

<!doctype html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>API 작성</title>
</head>
<body>
    @section('container')
    @show
</body>
</html>

 

그리고 views 폴더 안에 main화면으로 쓸 home.blade.php 파일을 만들었습니다.

@extends('layouts.app')

@section('container')
    <h1>HI</h1>
@stop

 

web.php에 아래와 같이 라우트를 설정해줍니다.

Route::get('/', function () {
    return view('home');
});

 

다음으로 Task 모델과 마이그레이션 파일을 만듭니다.

php artisan make:model Task -m 명령어로 모델과 마이그레이션 파일을 만들어줍니다.

모델인 Task.php 파일을 열어서 아래처럼 입력을 하고

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Task extends Model
{
    use HasFactory;
    protected $fillable = ['title', 'story'];
}

 

create_tasks_table.php 마이그레이션 파일을 열어서 아래와 같이 입력합니다.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTasksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->longText('story');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('tasks');
    }
}

 

그리고 php artisan migrate 명령어로 테이블을 생성합니다.

 

tasks 테이블

 

tasks 테이블 안에 데이터를 넣어줘야 하는데

팩토리를 이용해서 따로 작성하지 않고 데이터를 넣겠습니다.

 

php artisan make:factory TaskFactory 명령어를 입력합니다.

그러면 database\factories 폴더안에 파일이 생성됩니다.

아래와 같이 입력해줍니다.

 

<?php

namespace Database\Factories;

use App\Models\Task;
use Illuminate\Database\Eloquent\Factories\Factory;

class TaskFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Task::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            'title'=>$this->faker->word,
            'story'=>$this->faker->paragraph,
        ];
    }
}

 

faker를 이용해 임의로 넣어줍니다.

다음으로 php artsian tinker 명령어를 입력해줍니다.

tinker

tinker 설명은 따로 안하겠습니다.

App\Models\Task::factory()->count(10)->create(); 이렇게 입력하면

10개의 데이터가 만들어집니다.

factory

이렇게 데이터가 생성되고 tasks 테이블에도 데이터가 들어간 것을 볼 수 있습니다.

tasks

https://laravel.kr/docs/8.x/database-testing#creating-factories

 

라라벨 8.x - 데이터베이스

라라벨 한글 메뉴얼 8.x - 데이터베이스

laravel.kr

팩토리는 위 링크를 참고해주세요.

 

다음으로 컨트롤러를 만들겠습니다.

php artisan make:controller Api/TaskController 명령어를 입력해주세요.

tinker는 ctrl + c로 종료시킬 수 있습니다.

TaskController는 app\Http\Controllers\Api 폴더에 생성됩니다.

아래와 같이 입력해줍니다.

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Task;
use Illuminate\Http\Request;

class TaskController extends Controller
{
    public function index(){
        $tasks = Task::all();
        return response()->json($tasks, 200);
    }
}

 

그리고 라우트를 설정해줍니다.

routes\api.php 파일을 열어줍니다.

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\TaskController;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Route::get('/tasks', [TaskController::class, 'index']);

 

 

이렇게 작성해줍니다.

그리고 http://127.0.0.1:8000/api/tasks 경로로 페이지를 열어보면

데이터가 나오는 것을 볼 수 있는데 지저분하기 때문에 postman을 사용하겠습니다.

postman은 따로 설명하지 않겠습니다.

 

postman 화면

tasks 테이블에 저장된 정보가 나오는 것을 볼 수 있습니다.

 

 

'IT > PHP' 카테고리의 다른 글

Laravel - Pagination  (2) 2021.01.29
Laravel + vue : API(3)  (0) 2021.01.19
Laravel + vue : API(1)  (0) 2021.01.19
Laravel - TDD(4)  (0) 2021.01.13
Laravel - TDD(3)  (0) 2021.01.13

댓글