这是我的表单请求代码,我想在验证成功后添加新变量,这样我就可以在我的控制器上访问该变量:
class CouponRequest extends Request
{
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'start_year' => 'required',
'start_month' => 'required',
'start_day' => 'required',
'start_time' => 'required',
'finish_year' => 'required',
'finish_month' => 'required',
'finish_day' => 'required',
'finish_time' => 'required',
];
}
public function afterValidation()
{
$this->start_date = Carbon::create( $this->start_year, $this->start_month, $this->start_day );
}
}
所以在验证没有错误之后,我可以在我的控制器上调用这个实例:
$request->start_date;
我可以这样做吗?
以上所有方法都有效,但在我看来,我会重写表单请求类中的
passedValidation
方法。通过验证检查后调用此方法,从而保持数据干净。
例如。
public function passedValidation()
{
$this->merge([
'start_date' => Carbon::create( $this->start_year, $this->start_month, $this->start_day )
]);
}
如果您现在转储数据,您还应该看到新的 start_date 值。
你可以这样做
public function afterValidation()
{
$this->request->add([
'start_date' => Carbon::create($this->start_year, $this->start_month, $this->start_day)
]);
}
public function validate()
{
parent::validate();
$this->afterValidation();
}
然后访问控制器中的属性
$request->get('start_date');
在您的表单请求中使用功能
prepareForValidation()
protected function prepareForValidation(): void
{
$this->merge([
'start_date' => Carbon::now()
]);
}
干杯!
我在控制器中进行了验证。该方法有一个“Request $request”参数。我有一个我这样做:
$input = $request->all();
$input['my_new_field] = 'the_data';
我在成功请求操作后使用此方法。
public function withValidator(Validator $validator)
{
if ( $validator->fails() ) {
\Log::info('Error! No Manipulation!');
}else{
$this->merge([
'custom' => 'Test Manipulation!'
]);
\Log::info('Success Manipulation!');
}
}
在 laravel 8 及以上版本中,你可以这样做:
选项1:
public function safe(array $keys = null): \Illuminate\Support\ValidatedInput|array
{
$validated_input = parent::safe($keys);
return $validated_input->merge([
'foo' => "bar",
]);
}
然后在控制器中,您可以通过以下方式访问
foo
:
$request->safe()->foo;
选项2:
public function validated($key = null, $default = null)
{
$validated = parent::validated($key = null, $default = null);
return array_merge($validated, [
'foo' => 'bar'
]);
}
然后在控制器中:
$request->validated()['foo'];