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 테이블 안에 데이터를 넣어줘야 하는데
팩토리를 이용해서 따로 작성하지 않고 데이터를 넣겠습니다.
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 설명은 따로 안하겠습니다.
App\Models\Task::factory()->count(10)->create(); 이렇게 입력하면
10개의 데이터가 만들어집니다.
이렇게 데이터가 생성되고 tasks 테이블에도 데이터가 들어간 것을 볼 수 있습니다.
https://laravel.kr/docs/8.x/database-testing#creating-factories
팩토리는 위 링크를 참고해주세요.
다음으로 컨트롤러를 만들겠습니다.
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은 따로 설명하지 않겠습니다.
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 |
댓글