Php Laravel:根据请求使用的条件确定的验证规则
我刚刚使用Php Laravel:根据请求使用的条件确定的验证规则,php,validation,laravel-5,request,Php,Validation,Laravel 5,Request,我刚刚使用php artisan make:request MyExampleRequest创建了一个请求,接下来我要做的是建立一个逻辑,从表单输入中获取值,并对其进行比较,然后选择逻辑应该遵循的验证 在MyExampleRequest.php的rules()方法中,逻辑如下: public function rules() { if($valueFromPostInput === '2') { return [ 'email' => 'r
php artisan make:request MyExampleRequest
创建了一个请求,接下来我要做的是建立一个逻辑,从表单输入中获取值,并对其进行比较,然后选择逻辑应该遵循的验证
在MyExampleRequest.php
的rules()
方法中,逻辑如下:
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
发出的请求中发生这种情况,并在我的控制器中使用它,如公共函数(MyExampleRequest$Request)
我一直在寻找答案,但找不到答案。我真的很感激你的回复
注:英语不是我的母语。您可以使用请求帮助程序:
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;
}
或较短(但可读性较差)的版本:
我在想:有没有一种方法可以在不重复“return”中的大部分代码的情况下实现同样的事情?可能在返回数组中进行逻辑检查?这可能吗?
public function rules()
{
return [
'email' => 'required|email',
'g-recaptcha-response' => 'required|recaptcha'
] + (request()->get("valueFromPost") === '2' ? [ 'confirm_email' => 'required|email|same:email' ] : []);
}