我正在使用最新的Laravel
版本。
我有requests/StoreUser.php
:
public function rules() {
return [
'name' => 'required||max:255|min:2',
'email' => 'required|unique:users|email',
'password' => 'required|max:255|min:6|confirmed'
];
}
用于创建用户。
现在我需要并更新用户,但是如何仅执行特定规则?
例如,如果未提供name
,而仅提供了email
,我如何仅对电子邮件运行验证?
答案 0 :(得分:2)
这比您想象的要容易。使规则取决于HTTP方法。这是我的工作示例。
public function rules() {
// rules for updating record
if ($this->method() == 'PATCH') {
return [
'name' => 'nullable||max:255|min:2', // either nullable or remove this line is ok
'email' => 'required|unique:users|email',
];
} else {
// rules for creating record
return [
'name' => 'required||max:255|min:2',
'email' => 'required|unique:users|email',
'password' => 'required|max:255|min:6|confirmed'
];
}
}
答案 1 :(得分:1)
您可以将StoreUser请求与CreateUserRequest和UpdateUserRequest分开,以应用不同的验证规则。我认为,这种分离使您的代码更具可读性和可理解性。
答案 2 :(得分:1)
laravel中的任何HttpValidation请求都将FormRequest
扩展到Request
,因此您始终可以检查请求,身份验证,会话等...
因此您可以在规则功能内检查请求类型
class AnyRequest extends FormRequest
{
public function rules()
{
if ($this->method() == 'PUT'){
return [
]
}
if ($this->method() == 'PATH') {
return [
]
}
}
}
如果事情变得复杂,您可以创建一个专用的新HttpValidation请求PostRequest
PatchRequest
class UserController extends Controller
{
public function create(CreateRequest $request)
{
}
public function update(UpdateRequest $request)
{
}
}
另请参阅Laravel文档: