Laravel验证器不返回键

6 浏览
0 Comments

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有什么想法吗?

0
0 Comments

在Laravel中,如果在控制器中使用验证器(Validator)时,可能会出现验证器无法返回键(Laravel Validator Not Returning Key)的问题。

出现这个问题的原因是因为在控制器中,验证器(Validator)会在控制器之前运行,所以尝试在控制器中解决这个问题是行不通的。

解决这个问题的方法是在FormRequest类中使用prepareForValidation()方法。

具体的解决方法如下:

// InvoiceCreateRequest
protected function prepareForValidation()
{
    // 在这里进行逻辑处理
    $this->merge([
        'locale_id' => $localeId,
    ]);
}

通过使用FormRequest类的prepareForValidation()方法,可以在验证之前对输入数据进行预处理,从而解决验证器无法返回键的问题。

希望这个解决方法能对你有帮助。

以上是关于解决Laravel验证器无法返回键的问题的方法,希望能对你有所帮助。

0