哈囉大家好~
今天要來練習發送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之後,就可以看到以下畫面:
在畫面就可以看到剛剛hard code的傳送內容!也代表成功發送post request並得到回應~
其實本來想要做一個form,然後有標題和內容的input以及透過submit button來發送post request,但是我對於blade template太不熟了,今天要順利生出來有些困難,
我的鐵人文章很可能在今天面臨斷更危機XD
所以這些內容就留給後面的小專案了~接下來想要先往下了解Laravel框架的另一個部分:對資料庫的操作
包括如何透過ORM(Object Relational Mapping)的方式和資料庫互動,創建model與migration檔案⋯⋯等。
今天也順利完成發文任務!也要趕快找時間來惡補blade template的前端語法
那就明天見~881