如何在 laravel 中的 make:request 中更新时验证唯一字段
How to validate unique fields while updating in make:request in laravel
我正在 Laravel 5.5
中开发一个小型应用程序,我在其中使用 updateContact
创建请求并具有独特的电子邮件验证规则,同时在控制器中使用相同的验证我可以轻松地进行:
$contact = Contact::find($request->id);
Validator::make($data, [
'first_name' => 'required|max:255',
'email' => 'required', Rule::unique('contacts')->ignore($contact->id),
'address' => 'max:255',
'city' => 'max:255',
'state' => 'max:255',
'country' => 'max:255',
]);
并且可以通过我通过 php artisan make:request UpdateContact
提出请求并在 updateContact.php
中添加以下内容来验证:
namespace App\Http\Requests;
use App\Contact;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdateContact 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()
{
$contact = Contact::find($request->id);
return [
'first_name' => 'required|max:255',
'email' => 'required', Rule::unique('contacts')->ignore($contact->id),
'company_id' => 'required',
'address' => 'max:255',
'city' => 'max:255',
'state' => 'max:255',
'country' => 'max:255',
];
}
public function messages()
{
return [
'company_id.required' => 'Company name is required'
];
}
}
但我不知道 $request->id
我该如何使用它?
在 FormRequest class 中,$this 是请求对象的变量范围。只需执行以下操作即可获取 ID 属性
$contact = Contact::find($this->id);
表单中的任何其他字段也是如此。
要在其中调用 class 的对象,您可以使用 $this 变量范围。然后访问作为对象一部分的任何变量。例如
$this->id, $this->name 等
如果您想在同一个 class 中访问静态函数,那么您可以使用 self 关键字。
例如你有一个静态函数
public static function add($a, $b){
return $a+$b;
}
你调用 add 方法如 self::add(2,2);
为什么您再次找到请求对象中已有 ID 的联系人?
您可以简单地使用此代码:
'email' => 'required', Rule::unique('contacts')->ignore($this->id),
您正在使用 id 查找 Contact 然后再次使用 $contact->id,您已经在请求对象中拥有 $this。
您可以简单地使用 $this->id 它会给您 Contact 的 ID。无需在下面写:
$contact = Contact::find($this->id);
因为
$this->id is same as $contact->id
您还可以使用以下代码验证唯一的电子邮件:
'email' => "required|unique:users,email,$this->id,id" //use double quotation marks
它会做同样的事情:
'email' => 'required', Rule::unique('contacts')->ignore($this->id),
查看请求中使用的片段 class
public function rules()
{
switch ($this->method()) {
case 'POST':
{
return [
'name' => 'required',
'email' => 'required|email|unique:users',
'password' => 'required'
];
}
case 'PUT':
case 'PATCH':
{
return [
'name' => 'required',
'email' => "required|unique:users,email,$this->id,id"
//OR you can use below rule
// 'email' => Rule::unique('users')->ignore($this->id),
];
}
default: break;
}
}
我正在 Laravel 5.5
中开发一个小型应用程序,我在其中使用 updateContact
创建请求并具有独特的电子邮件验证规则,同时在控制器中使用相同的验证我可以轻松地进行:
$contact = Contact::find($request->id);
Validator::make($data, [
'first_name' => 'required|max:255',
'email' => 'required', Rule::unique('contacts')->ignore($contact->id),
'address' => 'max:255',
'city' => 'max:255',
'state' => 'max:255',
'country' => 'max:255',
]);
并且可以通过我通过 php artisan make:request UpdateContact
提出请求并在 updateContact.php
中添加以下内容来验证:
namespace App\Http\Requests;
use App\Contact;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdateContact 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()
{
$contact = Contact::find($request->id);
return [
'first_name' => 'required|max:255',
'email' => 'required', Rule::unique('contacts')->ignore($contact->id),
'company_id' => 'required',
'address' => 'max:255',
'city' => 'max:255',
'state' => 'max:255',
'country' => 'max:255',
];
}
public function messages()
{
return [
'company_id.required' => 'Company name is required'
];
}
}
但我不知道 $request->id
我该如何使用它?
在 FormRequest class 中,$this 是请求对象的变量范围。只需执行以下操作即可获取 ID 属性
$contact = Contact::find($this->id);
表单中的任何其他字段也是如此。
要在其中调用 class 的对象,您可以使用 $this 变量范围。然后访问作为对象一部分的任何变量。例如 $this->id, $this->name 等
如果您想在同一个 class 中访问静态函数,那么您可以使用 self 关键字。 例如你有一个静态函数
public static function add($a, $b){
return $a+$b;
}
你调用 add 方法如 self::add(2,2);
为什么您再次找到请求对象中已有 ID 的联系人?
您可以简单地使用此代码:
'email' => 'required', Rule::unique('contacts')->ignore($this->id),
您正在使用 id 查找 Contact 然后再次使用 $contact->id,您已经在请求对象中拥有 $this。 您可以简单地使用 $this->id 它会给您 Contact 的 ID。无需在下面写:
$contact = Contact::find($this->id);
因为
$this->id is same as $contact->id
您还可以使用以下代码验证唯一的电子邮件:
'email' => "required|unique:users,email,$this->id,id" //use double quotation marks
它会做同样的事情:
'email' => 'required', Rule::unique('contacts')->ignore($this->id),
查看请求中使用的片段 class
public function rules()
{
switch ($this->method()) {
case 'POST':
{
return [
'name' => 'required',
'email' => 'required|email|unique:users',
'password' => 'required'
];
}
case 'PUT':
case 'PATCH':
{
return [
'name' => 'required',
'email' => "required|unique:users,email,$this->id,id"
//OR you can use below rule
// 'email' => Rule::unique('users')->ignore($this->id),
];
}
default: break;
}
}