iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
1

接下來就來實作 store method。

  • 首先取得經 middleware 驗證後的使用者( auth_user 的 attribute 來源可以參考 第16天 ):
/*
...
*/

class PostsController extends Controller
{
    public function store(Request $request)
    {
        $auth_user = request()->get('auth_user')->first();
        
        /*
        ...
        */
        
    }
}
  • 驗證輸入欄位 ( 此處僅須輸入 title 和 content )
/*
...
*/
use Illuminate\Support\Facades\Validator;

class PostsController extends Controller
{
    public function store(Request $request)
    {
        /*
        ...
        */

        $rules = [
            'title' => 'required|string|min:2|max:500',
            'content' => 'required|string|min:2|max:1500'
        ];

        $validator = Validator::make($request->all(), $rules);
        if($validator->fails()){
            return response(['message' => $validator->errors()]);
        }
        
        /*
        ...
        */
    }
}
  • 儲存使用者輸入,並且提取驗證後使用者的 id
/*
...
*/
use App\Post;
class PostsController extends Controller
{
    public function store(Request $request)
    {
        /*
        ...
        */

        $data = $request->only(['title', 'content']);
        $data['user_id'] = $auth_user['id'];
        
        $post = Post::create($data);
        return response(['data' => $post]);
    }
}

完整程式碼:

*PostsController

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use App\Post;

class PostsController extends Controller
{
    public function store(Request $request)
    {
        $auth_user = request()->get('auth_user')->first();

        $rules = [
            'title' => 'required|string|min:2|max:500',
            'content' => 'required|string|min:2|max:1500'
        ];
        $validator = Validator::make($request->all(), $rules);
        if($validator->fails()){
            return response(['message' => $validator->errors()]);
        }
        $data = $request->only(['title', 'content']);
        $data['user_id'] = $auth_user['id'];
        
        $post = Post::create($data);
        return response(['data' => $post]);
    }
}

Postman 實測

  • 未登入

    image alt

  • 缺少欄位

    image alt

  • 建立成功

    image alt

之後再多建立幾篇貼文以及切換不同的使用者做同樣的動作 ( 此步驟忽略,為了之後的 method 做準備 ),完成後接下來就來實作 index 和 show。


上一篇
Day 21 : 貼文 ( Resource Controller )
下一篇
Day 23 : 貼文 ( Controller -- index & show ) [ eager loading ]
系列文
從零開始的Laravel RESTful api30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言