iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
0

完成上週的基礎環境設置,那我們就可以開始進行編程了,今天我們要做的就是todo list
沒錯!
就是大家最愛做的那個
那麼廢話不多說,就讓我們開始吧!!

創建MODEL、MIGRATION以及CONTROLLER

在terminal上輸入

php artisan make:model Task -mc

Task是model名稱,-mc會創建與model相關的migrationcontroller
執行指令後,會產生3個檔案,Task.phpappTaskController.phpapp/Http/Controllers *_create_tasks_table.phpdatabase/migrations

編輯DATABASE SCHEMA

Database Schema是在database/migrations裡的*_create_tasks_table.php,將內容更改成

<?php

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

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

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

遷移資料庫

在上一步設定好了Database Schema,現在要把設定migrate到MySQL/MariaDB上,在migrate之前別忘了先在.env檔設定連線資訊

php artisan migrate

編輯CONTROLLER

Controller負責處理Laravel的功能,我們要編輯TaskController.php來定義應用程式的功能
首先,要引入Task model

use App\Task

接下來新增以下程式碼在TaskController class裡,來定義index()功能

public function index()
{
    $tasks = Task::where("iscompleted", false)->orderBy("id", "DESC")->get();
    $c_tasks = Task::where("iscompleted", true)->get();
    return response()->json([
        'tasks' => $tasks, 
        'c_tasks' => $c_tasks
    ]);
}

這個function會查詢tasks資料表中的已完成及未完成task,並回傳一個JSON物件,內容是以降序排列。

然後是store()

public function store(Request $request)
{
    $task = Task::create($request->all());
    return response()->json([
        "code" => 200,
        "message" => "Task added successfully"
    ]);
}

這個function會將POST傳入的值存入對應的欄位中,並以JSON回傳成功訊息。

接下來是complete()

public function complete($id)
{
    $task = Task::find($id);
    $task->iscompleted = true;
    $task->save();
    return response()->json([
        "code" => 200,
        "message" => "Task listed as completed"
    ]);
}

這個function會將指定id的iscompleted欄位改為true,並以JSON回傳成功訊息。

最後是destroy()

public function destroy($id)
{
    $task = Task::find($id);
    $task = $task->delete();
    return response()->json([
        "code" => 200,
        "message" => "Task deleted successfully"
    ]);
}

這個function會將指定id的task刪除,並以JSON回傳成功訊息。

編輯API.PHP

這是今天實作的最後一步了,編輯routes/api.php來定義API連結。

<?php
Route::get("tasks", "TaskController@index");
Route::post("task", "TaskController@store");
Route::get("task/{id}/complete", "TaskController@complete");
Route::get("task/{id}/delete", "TaskController@destroy");

上一篇
DAY6 --- [番外]上海行(其一)
下一篇
DAY8 --- Laravel資料庫遷移(migration)
系列文
砍掉重練啦! 森林系男孩之後端工程師潛水App挑戰計畫27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言