iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
自我挑戰組

PHP框架-Laravel自學挑戰系列 第 10

DAY10-利用Controller發送API請求-POST REQUEST

  • 分享至 

  • xImage
  •  

哈囉大家好~
今天要來練習發送Post Request,我找到一個可以練習發送Post Request的API-JSONPlaceholder
文檔有提供對應的api來回傳假的已更新資料(資料不會真的餵給資料庫)
那就開始吧!

閱讀過文檔後,首先可以知道這個api(https://jsonplaceholder.typicode.com/posts)
會回傳所有的貼文,每一個物件都是一則貼文。userId對應的是發文者的帳號,id是貼文的流水號,title和body則是對應標題與內容。
我想要假裝創建一個新的貼文到資料庫,首先要透過發送post request請求來上傳數據。

首先創建一個新的Controller:(UserController.php)

<?php

namespace App\Http\Controllers;

use Illuminate\Contracts\View\View;
use Illuminate\Support\Facades\Http;

class UserController extends Controller
{
    public function createPost(): View
    {
        $body = array( #要上傳的數據
            'title' => 'new post here!',
            'body' => 'Hi this is a new post updated by user unknown.',
            'userId' => 100
        );
        $response = HTTP::withHeaders([ 
            'Content-type' => 'application/json; charset=UTF-8'
        ])->post('https://jsonplaceholder.typicode.com/posts', $body);
        if ($response->failed()) {
            return view('/error');
        }
        $result = json_decode($response);
        return view('/user', [ 'user' => $result ]);
    }
}

UserController中,createPost()這個function負責發送post request,這裡我直接hard code要上傳的數據。然後根據文檔的指示加上headers,這裡使用的是withHeaders function,後面才接著用post() function發送請求,也要記得加上第二個參數$body,將編輯的內容一起傳送。
若有成功返回值,則會切回user.blade.php的介面,並且將回傳值一起傳送。

接下來就是撰寫介面和路徑啦~
創建回傳的內容介面user.blade.php:

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <h1>New Post HERE!!!</h1>
        <h3>userId: {{ $user->userId }}</h3>
        <h3>id: {{ $user->id }}</h3>
        <h3>Title: </h3><h5>{{ $user->title }}</h5>
        <h3>Content: </h3><h5>{{ $user->body }}</h5>

    </body>
</html>

下面則是該畫面的對應路徑(web.php):

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;

Route::get('/post', [UserController::class, 'createPost']);

和昨天的get request操作相同,第二個參數要呼叫controller中發送請求的function createPost()。
在瀏覽器打開localhost:8000/post之後,就可以看到以下畫面:
https://ithelp.ithome.com.tw/upload/images/20240910/20168986qiwQNeFPb3.png

在畫面就可以看到剛剛hard code的傳送內容!也代表成功發送post request並得到回應~

其實本來想要做一個form,然後有標題和內容的input以及透過submit button來發送post request,但是我對於blade template太不熟了,今天要順利生出來有些困難,/images/emoticon/emoticon82.gif
我的鐵人文章很可能在今天面臨斷更危機XD
所以這些內容就留給後面的小專案了~接下來想要先往下了解Laravel框架的另一個部分:對資料庫的操作
包括如何透過ORM(Object Relational Mapping)的方式和資料庫互動,創建model與migration檔案⋯⋯等。


今天也順利完成發文任務!也要趕快找時間來惡補blade template的前端語法/images/emoticon/emoticon02.gif
那就明天見~881


上一篇
DAY9-利用Controller發送API請求- GET REQUEST
下一篇
DAY11 - 與Laravel框架的Eloquent ORM初認識!
系列文
PHP框架-Laravel自學挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言