ada*_*m78 6 php validation laravel-5 laravel-5.1
有没有办法在验证发生之前修改表单请求类中的输入字段?
我想修改一些输入日期字段,如下所示,但它似乎不起作用.
当我设置$this->start_dt的输入字段2016-02-06 12:00:00和$this->end_dt到2016-02-06 13:00:00我仍然得到验证错误"END_DT必须start_dt后".这意味着更新$this->start_dt和$this->end_dt在rules()函数内部时,输入请求值不会更改.
public function rules()
{
if ($this->start_dt){
$this->start_dt = Carbon::createFromFormat('d M Y H:i:s', $this->start_dt . ' ' . $this->start_hr . ':'. $this->start_min . ':00');
}
if ($this->end_dt){
$this->end_dt = Carbon::createFromFormat('d M Y H:i:s', $this->end_dt . ' ' . $this->end_hr . ':'. $this->end_min . ':00');
}
return [
'start_dt' => 'required|date|after:yesterday',
'end_dt' => 'required|date|after:start_dt|before:' . Carbon::parse($this->start_dt)->addDays(30)
];
}
Run Code Online (Sandbox Code Playgroud)
注意: start_dt并且end_dt是日期选择器字段和start_hr,start_min是下拉字段.因此,我需要通过组合所有字段来创建日期时间,以便我可以进行比较.
Tho*_*ini 18
作为laravel 5.4的您可以重写prepareForValidation的方法ValidatesWhenResolvedTrait来修改任何输入.laravel 5.1应该有类似的东西.
请求中的示例
/**
* Modify the input values
*
* @return void
*/
protected function prepareForValidation() {
// get the input
$input = array_map('trim', $this->all());
// check newsletter
if (!isset($input['newsletter'])) {
$input['newsletter'] = false;
}
// replace old input with new input
$this->replace($input);
}
Run Code Online (Sandbox Code Playgroud)
FormRequest具有方法validateData(),该方法返回数据以进行验证,因此我在表单请求中覆盖了它:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class MyClassRequest extends FormRequest
{
...
/**
* Get data to be validated from the request.
*
* @return array
*/
public function validationData() {
return array_merge(
$this->all(),
[
'number' => preg_replace("/[^0-9]/", "", $this->number)
]
);
}
...
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Laravel 5.4 :)
您可以执行以下操作:
public function rules(Request $request)
{
if ($request->has('start_dt')){
$request->replace('start_dt', Carbon::createFromFormat('d M Y H:i:s', $request->start_dt . ' ' . $request->start_hr . ':'. $request->start_min . ':00'));
}
if ($request->has('end_dt')){
$request->replace('end_dt' ,Carbon::createFromFormat('d M Y H:i:s', $request->end_dt . ' ' . $request->end_hr . ':'. $request->end_min . ':00'));
}
return [
'start_dt' => 'required|date|after:yesterday',
'end_dt' => 'required|date|after:start_dt|before:' . Carbon::parse($request->start_dt)->addDays(30)
];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4890 次 |
| 最近记录: |