[英]Laravel form request validation on store and update use same validation
我創建了 laravel 表單驗證請求並且對該驗證有獨特的規則。
我想在store
和update
方法上使用它,而無需再次創建新的表單請求驗證。
但問題是當store
時id不存在並且驗證通過並且在update
時我未能通過驗證因為存儲中存在id
我想忽略unique
規則上的 id 但使用相同的表單驗證請求
如果存儲或更新方法中的此操作忽略唯一 ID,檢查表單驗證請求 class 的最佳做法是什么?
好的..我可以像@porloscerros Ψ 建議的那樣做
public function rules()
{
$rules = [
'name' => 'required|string|unique:products|max:255',
];
if (in_array($this->method(), ['PUT', 'PATCH'])) {
$product = $this->route()->parameter('product');
$rules['name'] = [
'required',
'string',
'max:255',
Rule::unique('loan_products')->ignore($product),
];
}
return $rules;
}
試試這個,它對我有用。
Laravel 唯一性:第三個參數可以排除記錄的 id 例如,像這樣:
public function rules()
{
return [
'name' => 'required|string|max:255|unique:products,'.$this->id,
];
}
為什么在 FormRequest 中store
或update
時檢查id
? 你不需要這個。 id
像參數一樣出現在控制器的方法中。 Or laravel will create the model using DI in the your controller's method public function update(User $user)
and then you can use $user
like an instance of User model. You may check the id
in web.php or api.php: https://laravel.com/docs/7.x/routing#parameters-regular-expression-constraints
我建議您不要將一個 FormRequest 用於兩種方法。 這是不好的做法
我用這個
$validated = $request->validated();
使用這個方法:
public function createAccount(RegisterRequest $request)
{
$attr = $request->validated();
而不是這樣的:
public function createAccount(Request $request)
{
$attr = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|unique:users,email',
'password' => 'required|string|min:6|confirmed'
]);
使用php artisan make:request RegisterRequest
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|string|email|unique:users,email',
'password' => 'required|string|min:6|confirmed'
];
}
public function rules()
{
if (request()->isMethod('post')) {
$rules = [
'image' => 'required|image|mimes:jpeg,jpg,png|max:2000',
'name' => 'required|unique:categories'
];
} elseif (request()->isMethod('PUT')) {
$rules = [
'name' => 'required|unique:categories,name'
];
}
return $rules;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.