我刚刚使用php artisan make:request MyExampleRequest
创建了一个请求,接下来要做的就是有一个逻辑,我可以从表单输入中获取值并进行比较并选择逻辑遵循的验证。< / p>
在rules()
的{{1}}方法中,逻辑如下:
MyExampleRequest.php
我尝试了这个逻辑:
public function rules()
{
if($valueFromPostInput === '2') {
return [
'email' => 'required|email',
'confirm_email' => 'required|email|same:email',
'g-recaptcha-response' => 'required|recaptcha'
];
}
return [
'email' => 'required|email',
'g-recaptcha-response' => 'required|recaptcha'
];
}
但那没用。
我知道我可以使用public function rules()
{
if($this->attributes->has('valueFromPostInput') === '2') {
// more codes... }
}
控制器内的下面的逻辑来实现这个:
MyExampleController.php
但我希望在我使用public function create(Request $request)
{
if($request->valueFromPostInput === '2') {
$this->validate($request, [
'email' => 'required|email',
'confirm_email' => 'required|email|same:email',
'g-recaptcha-response' => 'required|recaptcha'
]);
} else {
$this->validate($request, [
'email' => 'required|email',
'g-recaptcha-response' => 'required|recaptcha'
]);
}
}
的请求中发生这种情况,并在我的控制器中使用php artisan make:request MyExampleRequest
。
我搜索了我找不到的答案。我真的很感激你的回应。
PS:英语不是我的母语。
答案 0 :(得分:2)
您可以使用请求帮助程序:
public function rules()
{
$baseRules = [
'email' => 'required|email',
'g-recaptcha-response' => 'required|recaptcha'
];
if(request()->get("valueFromPost") === '2') {
return $baseRules + [
'confirm_email' => 'required|email|same:email'
];
}
return $baseRules;
}
或更短(但不太可读)的版本:
public function rules()
{
return [
'email' => 'required|email',
'g-recaptcha-response' => 'required|recaptcha'
] + (request()->get("valueFromPost") === '2' ? [ 'confirm_email' => 'required|email|same:email' ] : []);
}