[Day 43] 心情隨筆後台及前台(五) - 編輯心情隨筆資料畫面及動作

心情隨筆後台及前台

接下來要處理的是編輯的畫面,
我們看一下昨天這個畫面
 

https://ithelp.ithome.com.tw/upload/images/20210425/20105694Zc7Lz50GtU.png


右邊有一個修改的按鈕,
點下去之後就可以針對這一則心情隨筆進行修改,
我們要在 app/Http/Controllers/AdminController.php 新增一個editMindPage方法,
修改的部分跟新增很像,
因為我們用的是同一個畫面
可以把addMinPage複製過來再改一下就可以,

我們這裡會用到一個參數mind_id,
這個參數寫在 routes/web.php

Route::group(['prefix' => '{mind_id}'], function(){

然後我們開始寫editMindPage方法,
我們要取得我們要的心情隨筆Mind資料,
首先我們要驗證有這筆資料(id)存在,
然後我們再驗證這筆資料是屬於這個使用者的(user_id),
總不能編輯別的使用者的資料吧,
如果找不到資料就轉回列表頁,
我們寫editMindPage如下:

//編輯心情隨筆資料
function editMindPage($mind_id)
{
    Log::notice('新增心情隨筆資料');
    //先取得自己的資料
    $User = $this->GetUserData();
    //取得心情隨筆列表
    $Mind = Mind::where('id', $mind_id)->where('user_id', $User->id)->first();

    if(!$Mind)
    {
        //如果找不到資料就回列表頁
        return redirect('/admin/mind');
    }

    $name = 'mind';
    $action = '修改';

    $binding = [
        'title' => ShareData::TITLE,
        'page' => $this->page,
        'name' => $name,
        'User' => $User,
        'Mind' => $Mind,
        'action' => $action,
        'result' => '',
    ];
    return view('admin.mind', $binding);
}

畫面的部分之前已經寫好,
所以問題不大,
再來就是要處理POST的部分,
也就是修改完資料之後的處理.
(即使沒修改我們也當成已修改來處理)

我們在 editMindProcess 方法加上編輯的處理如下:

//編輯心情隨筆的動作
function editMindProcess()
{
    Log::notice('處理心情隨筆資料');
    $User = $this->GetUserData();
    if(!$User)
    {
        Log::notice('找不到使用者');
        //如果找不到使用者,就回到首頁
        return redirect('/');
    }
    $name = 'mind';

    //接收輸入資料
    $input = request()->all();

    //驗證規則
    $rules = [
        //內容
        'content' => [
            'required',
            'max:400'
        ],
    ];

    //驗證資料
    $validator = Validator::make($input, $rules);

    if($input['id'] == '')
    {
        //新增
        $action = '新增';
        $Mind = new Mind;
        $Mind->content = $input['content'];
    }
    else
    {
        //修改
        $action = '修改';
        //取得心情隨筆列表
        $Mind = Mind::where('id', $input['id'])->where('user_id', $User->id)->first();

        if(!$Mind)
        {
            //如果找不到資料就回列表頁
            return redirect('/admin/mind');
        }
        $Mind->content = $input['content'];
    }

    if($validator->fails())
    {
        $binding = [
            'title' => ShareData::TITLE,
            'page' => $this->page,
            'name' => $name,
            'User' => $User,
            'Mind' => $Mind,
            'action' => $action,
            'result' => '',
        ];
        return view('admin.mind', $binding)
            ->withErrors($validator);
    }

    if($input['id'] == '')
    {
        //新增
        $input["user_id"] = $User->id;
        $input["enabled"] = 1;
        Mind::create($input);
    }
    else
    {
        //修改
        $Mind->save();
    }

    //成功就轉回列表頁
    return redirect('/admin/mind/?result=success');    
}

這樣子就完成修改的動作,
同樣修改完右上角會出現提示(這動作之前就寫好了)
 

https://ithelp.ithome.com.tw/upload/images/20210425/20105694pTdEKLlOHc.png