验证后如何更改数据?
以下代码不会导致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 );
}