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

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

如何驗證請求數據,在驗證后將另一個請求推送到數組,并在Laravel 6中以一種很好的方式創建對象

如何驗證請求數據,在驗證后將另一個請求推送到數組,并在Laravel 6中以一種很好的方式創建對象

PHP
慕無忌1623718 2022-08-05 15:34:41
我想驗證數據,然后在驗證后創建數據塊,并以一種很好的方式創建對象。這不是我唯一例外的解決方案:public function store(){ data = request()->validate([   'name_en' => 'required',   'name_de' => 'required' ]); $data['slug_en'] = Str::slug(request()->name_en); $data['slug_de'] = Str::slug(request()->name_de); Post::create( $data );   }我想以這種方式實現相同的目標:public function store(){Post::create( request()->validate([  'name_en' => 'required',  'name_de' => 'required']) );//where to place slugs creation?}
查看完整描述

2 回答

?
倚天杖

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

在Laravel中執行此操作的一個好方法是使用表單請求。您可以為請求創建一個擴展 FormRequest 類的類(假設您在此示例中調用它)。StorePost


在此類中,可以使用該方法放置驗證規則,如下所示:rules


public function rules()

{

    return [

        'name_en' => 'required',

        'name_de' => 'required',

    ];

}

若要添加密鑰,可以使用 prepareForValidation 方法。此方法可用于通過該方法向請求添加數據,例如:slug_merge


protected function prepareForValidation()

{

    $this->merge([

        'slug_en' => Str::slug($this->name_en),

        'slug_de' => Str::slug($this->name_de)

    ]);

}

由于這發生在驗證之前,因此您甚至可以在方法中向密鑰添加驗證。slug_rules()


因此,要實際使用此類,只需使用Laravel魔術在控制器方法中鍵入類名即可。您真正整潔的控制器現在可以如下所示:


public function store(StorePost $request)

{

    Post::create($request->all()); // or specify the keys you want inside the `all()` method

    // ...

}

就這么簡單!表單請求的驗證實際上將在控制器方法運行之前進行,因此您可以確保驗證的數據是正確的。


當然,您可以在表單請求類中添加所需的任何方法,因此可以通過許多不同的方法實現這一點,例如,使用返回包含slug值的數組的方法。getPostData


查看完整回答
反對 回復 2022-08-05
?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

Laravel有一個名為TransformsRequest的類;


它可以自動過濾和處理您請求中的每個字段。


我認為你可以創建一個中間件,就像TransformesRequest一樣。SlugStrings.php


因此,每個請求的鍵值都將通過 slug 進行轉換。


創建文件:app/Http/Middleware/SlugStrings.php

namespace App\Http\Middleware;


use Illuminate\Foundation\Http\Middleware\TransformsRequest;

use Illuminate\Support\Str;


class SlugStrings extends TransformsRequest

{

    /**

     * The names of the attributes that should be slug.

     *

     * @var array

     */

    protected $only = [

        'name_en',

        'name_de',

    ];


   /**

     * Transform the given value.

     *

     * @param  string  $key

     * @param  mixed  $value

     * @return mixed

     */

    protected function transform($key, $value)

    {

        if (in_array($key, $this->only, true)) {

            return is_string($value) ? Str::slug($value) : $value;

        } else {

            return $value;

        }

    }

}


將此中間件添加到 :app/Http/Kernel.php

    protected $middleware = [

        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,

        ...

        // Add it here:

        \App\Http\Middleware\SlugStrings::class,

        ...

    ];

現在,您不能對字段執行任何操作,只需從請求創建它們:name_enname_de


public function store()

{

Post::create( request()->validate([

  'name_en' => 'required',

  'name_de' => 'required'

]) );

}

這很容易。


所以下次你有另一個字段,你想把它弄臟。只需將其添加到屬性中即可。$only


查看完整回答
反對 回復 2022-08-05
  • 2 回答
  • 0 關注
  • 99 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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