Laravel表单请求:验证后更改数据



验证后如何更改数据?

以下代码不会导致phone$request->validated()中删除空格,但它在$request中。

我的表单请求:

class StoreUserRequest extends FormRequest
{
public function rules()
{
return [
'phone' => ['required', 'string']
];
}
public function passedValidation()
{
$this->merge(['phone' => str_replace(' ', '', $this->get('phone'))]);
}
}

我的控制器:

$validated = $request->validated();
$user = Customer::create($validated);

我应该使用吗https://laravel.com/docs/8.x/validation#adding-之后挂钩,以形成请求,而乔,我会使用它吗?

您可以创建自定义强制转换。

get方法负责将数据库中的原始值转换为强制转换值,而set方法应将强制转换值转换为可存储在数据库中的初始值。

<?php

namespace AppCasts;

use IlluminateContractsDatabaseEloquentCastsAttributes;

class Phone implements CastsAttributes
{
public function get($model, $key, $value, $attributes)
{
return $value;
}

public function set($model, $key, $value, $attributes)
{
return str_replace(' ', '', $value);
}
}

在你的模型中

<?php

namespace AppModels;

use AppCastsPhone;
use IlluminateDatabaseEloquentModel;

class User extends Model
{
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'phone' => Phone::class,
];
}

更多信息请点击此处:https://laravel.com/docs/9.x/eloquent-mutators

您不需要使用经过验证的数据,在验证后您仍然可以访问和使用原始请求数据,并进行任何您喜欢的数据操作,

$validated数据只有您传入的字段,因此根据情况,您可能不想使用它。

你有不同的方法来做

public function storeRequest(Request $request) {
// validation return 422 on failure
$validated = $request->validate( [
'first_name' => 'required|max:255',
'last_name' => 'required|max:255',
'email' => 'required|email:filter|max:255|unique:users',
'phone' => 'required',
'some_data' => 'required|min:6',
]);
// Validation fine, can still access the original request
$request->merge(['phone' => str_replace(' ', '', $request->input('phone'))]);
// use original request and remove some data
$user = Customer::create( $request->except('some_data') );
//or pick some data from original request
$user = Customer::create( $request->only('first_name', 'last_name', 'email', 'phone') );
// or use the validated data and update the phone value
$validated['phone'] = str_replace(' ', '', $validated['phone'] ); // or str_replace(' ', '', $request->input('phone') )
$user = Customer::create( $validated );
} 

相关内容

  • 没有找到相关文章

最新更新