iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

1

表單HTTP方法設定

HTTP方法設定

在更新商品資訊時,商品更新網址為/merchandise/{ merchandise _id} (put),然而在表單中的HTTP方法只有getpost,並沒有putdelete的方法,為了能夠在表單中使用putdelete等方法,Laravel提供method_field()的方法,可以產生該HTTP方法的隱藏input欄位,欄位名稱會是_method,欄位值會帶入該方法名稱像是PUT或DELETE,透過這樣的方式,Laravel會識別是否有傳入_method欄位資料,若有的話會以這個欄位資料的HTTP方法為主。

resources/views/merchandise/editMerchandise.blade.php

<form action="/merchandise/{{ $Merchandise->id }}"
    method="post"
    enctype="multipart/form-data">
    <!-- 隱藏方法欄位 -->
    {{ method_field('PUT') }}
</form>

隱藏方法欄位輸出結果

<input type="hidden" name="_method" value="PUT" />

商品資料驗證

資料驗證

在使用者傳送商品資料要進行更新時,會先根據傳入的商品編號,取得資料表中該商品編號的商品,當有該商品時,再開始對商品進行更新處理,在處理時一樣要對所有傳入的資料驗證後再做處理,所以我們一樣使用Validator驗證商品資料,驗證器在控制器邏輯會像這樣

app/Http/Controllers/MerchandiseController.php

<?PHP
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Shop\Entity\Merchandise;
use Validator; //驗證器

class MerchandiseController extends Controller
{
    //商品資料更新處理
    public function merchandiseItemUpdateProcess($merchandise_id)
    {
        //撈取商品資料
        $Merchandise = Merchandise::findOrFail($merchandise_id);
        //接收輸入資料
        $input = request()->all();

        //驗證規則
        $rules = [
            //商品狀態
            'status' => [
                'required',
                'in:C,S' //S前面不能有空格
            ],
            //商品名稱
            'name' => [
                'required',
                'max:80',
            ],
            //商品英文名稱
            'name_en' => [
                'required',
                'max:80',
            ],
            //商品介紹
            ' introduction' => [
                'required',
                'max:2000',
            ],
            //商品英文介紹
            ' introduction_en' => [
                'required',
                'max:2000',
            ],
            //商品照片
            'photo' => [
                'file',
                'image',
                'max:10240', //10 MB
            ],
            //商品價格
            'price' => [
                'required',
                'integer',
                'min:0',
            ],
            //商品剩餘數量
            'remain_count' => [
                'required',
                'integer',
                'min:0',
            ],
        ];

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

        if($validator->fails())
        {
            //資料驗證錯誤
            return redirect('/merchandise/'.$Merchandise->id.'/edit')
                ->withErrors($validator)
                ->withInput();
        }

        var_dump($input);
        exit();
    }
}
?>

驗證商品照片

由於商品照片是檔案的格式,所以當有傳入照片時,我們必須判斷此欄位資料是否是檔案,且檔案必須為圖片才允許上傳,最大的檔案大小限制為10MB,當上傳的商品照片檔案符合我們的條件設定時,才允許驗證通過,根據這樣的條件,可以將驗證規則設定成這樣。

//驗證規則
$rules = [
    //商品照片
    'photo' => [
        'file',
        'image',
        'max:10240', //10 MB
    ],
];

驗證商品價格及剩餘數量

在驗證商品價格及剩餘數量時,限制傳入的資料必須要為整數,且數字至少要大於等於0,根據這樣的條件,可以將驗證規則設定成這樣

//驗證規則
$rules = [
    //商品價格
    'price' => [
        'required',
        'integer',
        'min:0',
    ],
    //商品剩餘數量
    'remain_count' => [
        'required',
        'integer',
        'min:0',
    ],
];

驗證結果畫面
http://localhost:6943/merchandise/1/edit
https://ithelp.ithome.com.tw/upload/images/20191015/20105694N029wwCa7S.png


上一篇
[Day 37] Laravel實作 - 商品管理與瀏覽(四)
下一篇
[Day 39] Laravel實作 - 商品管理與瀏覽(六)
系列文
Laravel從入門到放棄…………原生PHP (疑?48

尚未有邦友留言

立即登入留言