有没有办法在 laravel 的请求文件中获取消息函数的输入值?



在我的注册表单,我有一个bool输入newCompany值

0=用公司代码注册现有公司1=create new company

在不同的字段使用required_if验证。如果失败,则抛出一条验证消息,如"当Company为0时,需要Company Code字段"。

我想把这个0的值设为Existing为0 New为1。所以我把它们插入到我的语言文件中,并在lang/en/validate .php文件中更改:value属性为默认错误消息。

'required_if' => 'The :attribute field is required when :other is :value.'

我的app/Requests/AuthRegisterRequest.php文件:

<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
use IlluminateValidationRulesPassword;
use IlluminateValidationRulesFile;
use IlluminateHttpRequest;
class AuthRegisterRequest extends FormRequest {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize() {
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules(Request $request) {
return [
'name'                => 'required|max:50|alpha',
'surname'             => 'required|max:50|alpha',
'email'               => 'required|email|unique:users,email',
'password'            => [
'required',
Password::min(8)->numbers()->letters()->uncompromised(5)
],
'c_password'          => 'required|same:password',
'newCompany'          => 'required|boolean',
'companyCode'         => 'nullable|required_if:newCompany,0|max:20|exists:user_companies,code',
'companyName'         => 'nullable|required_if:newCompany,1|max:255',
'companyPhone'        => 'nullable|required_if:newCompany,1|max:50|unique:user_companies,phone',
'activityTaxDocument' => [
'nullable',
'required_if:newCompany,1',
File::types(['jpg, jpeg, gif, png, doc, docx, pdf'])->max(5*1024) //5 MB
],
'privacyPolicies' => 'required|boolean'
];
}
public function attributes() {
return __('fieldname.AuthRegister');
}
public function messages() {
return [
'companyCode.required_if'=>__('validation.required_if', [
'value'=>__('fieldname.AuthRegister.newCompanyValues')['0']
]),
'companyName.required_if'=>__('validation.required_if', [
'value'=>__('fieldname.AuthRegister.newCompanyValues')['1']
]),
'companyPhone.required_if'=>__('validation.required_if', [
'value'=>__('fieldname.AuthRegister.newCompanyValues')['1']
]),
'activityTaxDocument.required_if'=>__('validation.required_if', [
'value'=>__('fieldname.AuthRegister.newCompanyValues')['1']
])
];
}
}

和lang/en/fieldname.php文件

<?php
return [
'AuthRegister' => [
'name' => 'Name',
'surname' => 'Surname',
'email' => 'Email',
'password' => 'Password',
'c_password' => 'Confirm Password',
'newCompany' => 'Company',
'companyCode' => 'Company Code',
'companyName' => 'Company Name',
'companyPhone' => 'Company Phone',
'activityTaxDocument' => 'Activity/Tax Document',
'privacyPolicies' => 'Privacy Policy & Terms',
'newCompanyValues' => [
'1' => 'New',
'0' => 'Existing'
]
]
];

它的工作,但我想结合消息为required_if验证缩短根据newCompany字段的代码。但是无法在messages函数中获得输入值。

尝试:

public function messages(Request $request) {
return [
'required_if'=>__('validation.required_if', [
'value'=>__('fieldname.AuthRegister.newCompanyValues')[$request->newCompany]
])
];
}

但是在

下面抛出500错误
{
"message": "Declaration of App\Http\Requests\AuthRegisterRequest::messages(Illuminate\Http\Request $request) must be compatible with Illuminate\Foundation\Http\FormRequest::messages()",
"exception": "Symfony\Component\ErrorHandler\Error\FatalError",
"file": "/var/www/html/app/Http/Requests/AuthRegisterRequest.php",
"line": 67,
"trace": []
}

我有很多这样的表格。其中一些根据bool字段有更多的字段变化。是否有一种方法可以在消息函数中获得输入值或从其他地方捕获它?如果没有,是否值得定义一个新规则,或者我应该单独为每个字段定义它?

谢谢。

我认为您可以使用sometimes方法而不使用message()方法

public function rules(Request $request) {
return [
'name'                => 'required|max:50|alpha',
'surname'             => 'required|max:50|alpha',
'email'               => 'required|email|unique:users,email',
'password'            => [
'required',
Password::min(8)->numbers()->letters()->uncompromised(5)
],
'c_password'          => 'required|same:password',
'newCompany'          => 'required|boolean',
'companyCode'         => 'nullable|sometimes|required_if:newCompany,0|max:20|exists:user_companies,code',
'companyName'         => 'nullable|sometimes|required_if:newCompany,1|max:255',
'companyPhone'        => 'nullable|sometimes|required_if:newCompany,1|max:50|unique:user_companies,phone',
'activityTaxDocument' => [
'nullable',
'sometimes',
'required_if:newCompany,1',
File::types(['jpg, jpeg, gif, png, doc, docx, pdf'])->max(5*1024) //5 MB
],
'privacyPolicies' => 'required|boolean'
];
}

最新更新