亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不想編輯存儲和更新功能中使用的特定字段

不想編輯存儲和更新功能中使用的特定字段

PHP
精慕HU 2023-09-22 14:36:22
產品控制器public function store(){    $product = Product::create($this->validateRequest());    return redirect('/product');}public function update(Product $product){    $product->update($this->validateRequest());    return redirect('/product');}private function validateRequest(){    return request()->validate([        'sub_category_id' => ['required'],        'name' => ['required', 'min:4'],        'code' => ['required', 'alpha_dash','unique:products'],        'description' => ['required', 'min:4'],        'color' => ['required', 'min:3'],        'price' => ['required', 'integer'],    ]);}這里的代碼與表產品相比具有獨特的價值。但每當我編輯表單時,它都會說代碼已被采用。那么如何在不編輯“代碼”的情況下執行此操作(其獨特)。
查看完整描述

3 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

您可以在唯一檢查期間忽略某些 ID:


use Illuminate\Validation\Rule;


public function store()

{

    Product::create($this->validateRequest(new Product()));


    return redirect('/product');

}


public function update(Product $product)

{

    $product->update($this->validateRequest($product));


    return redirect('/product');

}


private function validateRequest(Product $product)

{

    return request()->validate([

        'sub_category_id' => ['required'],

        'name' => ['required', 'min:4'],

        'code' => ['required', 'alpha_dash', Rule::unique('products')->ignore($product)],

        'description' => ['required', 'min:4'],

        'color' => ['required', 'min:3'],

        'price' => ['required', 'integer'],

    ]);

}

在這里,您要么在更新時傳遞現有模型,要么在存儲時傳遞新的模型實例,因此在存儲新產品時$product->id返回調用,這樣數據庫中的任何產品都不會被忽略,或者在更新時傳遞 id,然后僅忽略該產品。null


來自文檔:


強制唯一規則忽略給定 ID:


有時,您可能希望在唯一檢查期間忽略給定的 ID。例如,考慮一個“更新個人資料”屏幕,其中包括用戶的姓名、電子郵件地址和位置。您可能需要驗證電子郵件地址是否唯一。但是,如果用戶僅更改名稱字段而不更改電子郵件字段,則您不希望引發驗證錯誤,因為該用戶已經是電子郵件地址的所有者。


為了指示驗證器忽略用戶的 ID,我們將使用該類Rule 來流暢地定義規則。在此示例中,我們還將驗證規則指定為數組,而不是使用 | 分隔規則的字符:


use Illuminate\Validation\Rule;


Validator::make($data, [

    'email' => [

        'required',

        Rule::unique('users')->ignore($user->id),

    ],

]);

但請注意以下幾點:


您永遠不應該將任何用戶控制的請求輸入傳遞到忽略方法中。相反,您應該只傳遞系統生成的唯一 ID,例如來自 Eloquent 模型實例的自動遞增 ID 或 UUID。否則,您的應用程序將容易受到 SQL 注入攻擊。


查看完整回答
反對 回復 2023-09-22
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

所以這里的問題是您使用相同的規則來創建產品和更新產品。


如果您使用的是最新的 Laravel,您可能需要閱讀有關表單請求的文檔https://laravel.com/docs/7.x/validation#form-request-validation并創建不同的表單請求以進行存儲和更新。


如果你還想用你的方式,你可以嘗試如下


private function validateRequest()

{

    $rules = [

        'sub_category_id' => ['required'],

        'name' => ['required', 'min:4'],

        'description' => ['required', 'min:4'],

        'color' => ['required', 'min:3'],

        'price' => ['required', 'integer'],

    ];

    

    if (request()->isMethod('store')) {

        $rules['code'] = ['required', 'alpha_dash'];

    }


    return request()->validate($rules);

}

請告訴我是否有效!


查看完整回答
反對 回復 2023-09-22
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

試試這個,正確且干凈的代碼


產品控制器


use Illuminate\Validation\Rule; // add this


public function store()

{

? ? $product = Product::create($this->validateRequest());


? ? return redirect('/product'); //use route instead of URL

}


public function update(Product $product)

{

? ? $product->update($this->validateRequest($product->id));


? ? return redirect('/product'); //use route instead of URL

}


private function validateRequest($id = null)

{

? ? return request()->validate([

? ? ? ? 'sub_category_id' => 'required',

? ? ? ? 'name' => 'required|min:4',

? ? ? ? 'code' => 'required|alpha_dash|' . Rule::unique('products')->ignore($id),

? ? ? ? 'description' => 'required|min:4',

? ? ? ? 'color' => 'required|min:3',

? ? ? ? 'price' => 'required|integer',

? ? ]);

}

建議使用Form請求驗證


查看完整回答
反對 回復 2023-09-22
  • 3 回答
  • 0 關注
  • 147 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號