如何验证请求数据,在验证后将另一个请求推送到数组,并在Laravel 6中以一种很好的方式创建对象

我想验证数据,然后在验证后创建数据块,并以一种很好的方式创建对象。


这不是我唯一例外的解决方案:


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?


}


慕无忌1623718
浏览 117回答 2
2回答

倚天杖

在Laravel中执行此操作的一个好方法是使用表单请求。您可以为请求创建一个扩展 FormRequest 类的类(假设您在此示例中调用它)。StorePost在此类中,可以使用该方法放置验证规则,如下所示:rulespublic function rules(){    return [        'name_en' => 'required',        'name_de' => 'required',    ];}若要添加密钥,可以使用 prepareForValidation 方法。此方法可用于通过该方法向请求添加数据,例如:slug_mergeprotected 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

郎朗坤

Laravel有一个名为TransformsRequest的类;它可以自动过滤和处理您请求中的每个字段。我认为你可以创建一个中间件,就像TransformesRequest一样。SlugStrings.php因此,每个请求的键值都将通过 slug 进行转换。创建文件:app/Http/Middleware/SlugStrings.phpnamespace 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_depublic function store(){Post::create( request()->validate([  'name_en' => 'required',  'name_de' => 'required']) );}这很容易。所以下次你有另一个字段,你想把它弄脏。只需将其添加到属性中即可。$only
打开App,查看更多内容
随时随地看视频慕课网APP