我正在使用laravel 5.6 resources controllers
和form request
,问题是我创建的某些输入是required
,但是在编辑时是可选的,例如文件输入。所以我有这个表格要求
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ProgramRequest 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
*/
public function rules()
{
return [
//
'name.*' => 'required',
'description.*' => 'required',
'logo' => 'required|image|max:3000',
'logo_alt' => 'required|image|max:3000'
];
}
}
在创建程序时必须发送字段logo
和logo_alt
,但是在编辑程序时发送logo
是可选的。
是否可以使用相同的form request
来验证这两种情况,或者我必须创建不同的form request
进行编辑和创建?
答案 0 :(得分:1)
您可以使用$this->method()
来检查使用了哪种请求方法,并针对每种情况显示不同的规则:
public function rules()
{
switch($this->method())
{
case 'GET':
case 'DELETE':
{
return [];
}
case 'POST':
{
return [
'name.*' => 'required',
'description.*' => 'required',
'logo' => 'required|image|max:3000',
'logo_alt' => 'required|image|max:3000'
];
}
case 'PUT':
{
return [
'description.*' => 'required',
'logo' => 'nullable|image|max:3000',
'logo_alt' => 'nullable|image|max:3000'
];
}
case 'PATCH':
{
return [];
}
default:break;
}
}
在上面的示例中,POST
用于创建,PUT
用于更新。
注意,我已将nullable
用于PUT
验证规则,这告诉请求对象该字段是可选的。
答案 1 :(得分:0)
代替:
return [
//
'name.*' => 'required',
'description.*' => 'required',
'logo' => 'required|image|max:3000',
'logo_alt' => 'required|image|max:3000'
];
您可以使用:
$rules = [
'name.*' => 'required',
'description.*' => 'required',
'logo' => ['image', 'max:3000'],
'logo_alt' => ['image', 'max:3000'],
];
if ($this->isMethod('POST')
{
$rules['logo'][] = 'required';
$rules['logo_alt'][] = 'required';
}
return $rules;
因此,基本上,您具有更新规则,但对于POST方法,您还需要徽标和logo_alt。您也可以使用管道语法|
,但是将数组语法用于规则更加方便,以便以后可以在需要时执行此类操作。
答案 2 :(得分:0)
我知道我迟到了。但是我发现这样更好的解决方案
$requiredOrNull = '';
switch ($this->method()) {
case 'POST':
$requiredOrNull = 'nullable';
break;
case 'PUT':
$requiredOrNull = 'required';
break;
}
return [
//
'name.*' => 'required',
'description.*' => 'required',
'logo' => $requiredOrNull . '|required|image|max:3000',
'logo_alt' => $requiredOrNull . '|required|image|max:3000'
];
}
基本上,它将检查该方法是否为post方法,您的logo
和logo_alt
是必需的,但是如果放置了该方法,它将为空