Laravel验证器不返回键
Laravel验证器不返回键
我正在为我们的项目创建一个新的API调用。\n我们有一个包含不同区域设置的表。例如:\n
ID Code 1 fr_CA 2 en_CA
\n然而,在调用API创建发票时,我们不想发送ID,而是发送代码。\n这是我们发送的对象示例:\n{\n \"locale_code\": \"fr_CA\",\n \"billing_first_name\": \"David\",\n \"billing_last_name\": \"Etc\"\n}\n
\n在我们的控制器中,我们使用一个具有FormRequest
扩展的函数将locale_code
修改为locale_id
:\n
// 这个函数是我们控制器中的方法 public function createInvoice(InvoiceCreateRequest $request) { $validated = $request->convertLocaleCodeToLocaleId()->validated(); } // 这个函数是继承了FormRequest的ApiRequest的一部分 // InvoiceCreateRequest继承了ApiRequest // 所以顺序是FormRequest -> ApiRequest -> InvoiceCreateRequest public function convertLocaleCodeToLocaleId() { if(!$this->has('locale_code')) return $this; $localeCode = $this->input('locale_code'); if(empty($localeCode)) return $this['locale_id'] = NULL; $locale = Locale::where(Locale::REFERENCE_COLUMN, $localeCode)->firstOrFail(); $this['locale_id'] = $locale['locale_id']; return $this; }
\n在该函数中,如果我们对$this->input(\'locale_id\')
进行转储,它会返回正确的ID(1)。然而,当它通过validated();
时,即使它是规则的一部分,它也不会返回locale_id
:\n
public function rules() { return [ 'locale_id' => 'sometimes' ]; }
\n我还尝试过merge、add、set等函数,但都没有起作用。\n有什么想法吗?
在Laravel中,如果在控制器中使用验证器(Validator)时,可能会出现验证器无法返回键(Laravel Validator Not Returning Key)的问题。
出现这个问题的原因是因为在控制器中,验证器(Validator)会在控制器之前运行,所以尝试在控制器中解决这个问题是行不通的。
解决这个问题的方法是在FormRequest类中使用prepareForValidation()方法。
具体的解决方法如下:
// InvoiceCreateRequest protected function prepareForValidation() { // 在这里进行逻辑处理 $this->merge([ 'locale_id' => $localeId, ]); }
通过使用FormRequest类的prepareForValidation()方法,可以在验证之前对输入数据进行预处理,从而解决验证器无法返回键的问题。
希望这个解决方法能对你有帮助。
以上是关于解决Laravel验证器无法返回键的问题的方法,希望能对你有所帮助。