FormRequest 中字段的 Laravel 默认值



我可以在Laravel的FormRequest中为不存在的字段设置默认值吗?

例如,如果传入请求中不存在名为"时区"的字段,则将其设置为"美国/多伦多"。

好吧,我为此编写了一个特征,它检查表单请求中是否存在一个名为"defaults"的函数,它将替换默认值

trait RequestDefaultValuesTrait {

protected function prepareForValidation(){
// add default values 
if( method_exists( $this, 'defaults' ) ) {
foreach ($this->defaults() as $key => $defaultValue) {
if (!$this->has($key)) $this->merge([$key => $defaultValue]);
}
}
} 
}

您需要做的是将此特征添加到 FormRequest 类,然后添加如下所示的函数:

protected function defaults()
{
return [
'country'   => 'US',
'language'  => 'en',
'timezone'  => 'America/Toronto',
];
}

老实说,我没有链接这种方法,但它有效。

in request class add

public function prepareForValidation()
{
$this->mergeIfMissing([
'timezone'  => 'America/Toronto'
]);
}

试试这个

if(!$request->has('timezone') {
$request->merge(['timezone' =>'America/Toronto']);
}  

我不太确定您是否需要以这种方式执行此操作,但是如果您想:

class CreateUpdateDataFormRequest extends Request
{
public function authorize()
{
return true;
}
public function rules()
{
return [];
}
protected function getValidatorInstance()
{
$data = $this->all();
if(!isset($data['timezone'])) {
$data['timezone'] = 'America/Toronto';
$this->getInputSource()->replace($data);
}
// modify data before sending to validator
return parent::getValidatorInstance();
}

最新更新