目次
はじめに
こちらは数本の記事で構成されています
- ①Vue.js & Laravel8 & Docker(環境構築)
- ②Vue.js & Laravel8 & Docker(データベースとダミーデータの作成)
- ③Vue.js & Laravel8 & Docker(Read…データベースからデータを取得)
- ④Vue.js & Laravel8 & Docker(Create…データベースに保存)
- ⑤Vue.js & Laravel8 & Docker(Read…データベースからデータを1件のみ取得)
- ⑥Vue.js & Laravel8 & Docker(Update…データベースを更新)
- ⑦Vue.js & Laravel8 & Docker(Delete…データを削除)
目標
データベースからAPIでデータを取得し、画面に表示させる
実装
①フロントエンドからAPIにリクエストする
<template>
<v-card>
<v-card-title>
<span>タスク 一覧</span>
<v-spacer></v-spacer>
<v-btn router to="/main/task/create" height="35px" width="35px" fab>
<v-icon color="primary">mdi-plus</v-icon>
</v-btn>
</v-card-title>
<v-card-text class="pa-0">
<div class="task_list">
<v-divider></v-divider>
<v-simple-table>
<thead>
<tr>
<th>ID</th>
<th>タスク名</th>
</tr>
</thead>
<tbody>
<tr @click="$router.push(`/main/task/read?taskId=${task.task_id}`)" v-ripple v-for="(task,index) in tasks" :key="index">
<td>{{task.task_id}}</td>
<td>{{task.task_name}}</td>
</tr>
</tbody>
</v-simple-table>
</div>
</v-card-text>
</v-card>
</template>
<script>
+ import axios from "axios";
export default {
data() {
return {
tasks: [
{
task_id: 1,
task_name: "1番目のタスク(dummy)",
},
{
task_id: 2,
task_name: "2番目のタスク(dummy)",
},
{
task_id: 3,
task_name: "3番目のタスク(dummy)",
},
],
};
},
methods: {
+ getTasks() {
+ const requestConfig = {
+ url: "http://localhost:8001/api/tasks",
+ method: "GET",
+ };
+ axios(requestConfig)
+ .catch(() => {
+ alert("エラー");
+ });
+ },
},
mounted() {
+ this.getTasks();
},
};
</script>
これで「①フロントエンドからAPIにリクエストする」が達成されました
②APIからコントローラーにリクエストを送る
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
- /*
- |--------------------------------------------------------------------------
- | 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:sanctum')->get('/user', function (Request $request) {
- return $request->user();
- });
+ Route::get('/tasks', 'App\Http\Controllers\TaskController@getTasks');
これで「②APIからコントローラーにリクエストを送る」が達成されました
③コントローラーからデータベースにリクエストを送る
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Task;
class TaskController extends Controller
{
+ public function getTasks()
+ {
+ $data = Task::get();
+ return $data;
+ }
}
これで「③コントローラーからデータベースにリクエストを送る」が達成されました
④レスポンスを画面に表示させる
<template>
<v-card>
<v-card-title>
<span>タスク 一覧</span>
<v-spacer></v-spacer>
<v-btn router to="/main/task/create" height="35px" width="35px" fab>
<v-icon color="primary">mdi-plus</v-icon>
</v-btn>
</v-card-title>
<v-card-text class="pa-0">
<div class="task_list">
<v-divider></v-divider>
<v-simple-table>
<thead>
<tr>
<th>ID</th>
<th>タスク名</th>
</tr>
</thead>
<tbody>
<tr @click="$router.push(`/main/task/read?taskId=${task.task_id}`)" v-ripple v-for="(task,index) in tasks" :key="index">
<td>{{task.task_id}}</td>
<td>{{task.task_name}}</td>
</tr>
</tbody>
</v-simple-table>
</div>
</v-card-text>
</v-card>
</template>
<script>
import axios from "axios";
export default {
data() {
return {
tasks: [
- {
- task_id: 1,
- task_name: "1番目のタスク(dummy)",
- },
- {
- task_id: 2,
- task_name: "2番目のタスク(dummy)",
- },
- {
- task_id: 3,
- task_name: "3番目のタスク(dummy)",
- },
],
};
},
methods: {
getTasks() {
const requestConfig = {
url: "http://localhost:8001/api/tasks",
method: "GET",
};
axios(requestConfig)
+ .then((res) => {
+ this.tasks = res.data;
+ })
.catch(() => {
alert("エラー");
});
},
},
mounted() {
this.getTasks();
},
};
</script>
これで「④レスポンスを画面に表示させる」が達成されました
確認
http://localhost:3000/#/main/task にアクセスし下記の画面が表示されれば成功
次回
初めてプログラミングに触る方は、TechAcademy [テックアカデミー]などの無料体験がオススメです!