我可以在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();
}