use*_*736 42 php validation laravel laravel-4
我知道这个问题之前已被多次询问,但没有人解释当你在模型中验证时如何获得id.
'email' => 'unique:users,email_address,10'
Run Code Online (Sandbox Code Playgroud)
我的验证规则在模型中,因此如何将记录的ID传递给验证规则.
这是我的模特/用户
protected $rules_update = [
'email_address' => 'required|email|unique:users,email_address,'.$id,
'first_name' => "required",
'last_name' => "required",
'password' => "required|min:6|same:password_confirm",
'password_confirm' => "required:min:6|same:password",
'password_current' => "required:min:6"
];
Run Code Online (Sandbox Code Playgroud)
车型/ BaseModel
protected $rules = array();
public $errors;
/*
* @data: array, Data to be validated
* @rules: string, rule name in model
*/
public function validate($data, $rules = "rules") {
$validation = Validator::make($data, $this->$rules);
if($validation->passes()) {
return true;
}
$this->errors = $validation->messages();
return false;
}
Run Code Online (Sandbox Code Playgroud)
Reh*_*mat 31
附带说明一下email_address,在Laravel的内置身份验证系统中,该字段的大多数答案都是谈论电子邮件字段名称为just email。这是一个示例,您可以如何验证唯一字段,即有关更新的电子邮件:
在Form Request中,您这样做:
public function rules()
{
return [
'email' => 'required|email|unique:users,email,'.$this->user->id,
];
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您要直接在控制器中验证数据:
public function update(Request $request, User $user)
{
$request->validate([
'email' => 'required|email|unique:users,email,'.$user->id,
]);
}
Run Code Online (Sandbox Code Playgroud)
更新:如果您正在更新在用户签名的,而不是注入User模型到你的路线,你可以访问时遇到未定义的属性id上$this->user。在这种情况下,请使用:
public function rules()
{
return [
'email' => 'required|email|unique:users,email,'.$this->user->id,
];
}
Run Code Online (Sandbox Code Playgroud)
自Laravel 5.7起,一种更优雅的方法是:
public function update(Request $request, User $user)
{
$request->validate([
'email' => 'required|email|unique:users,email,'.$user->id,
]);
}
Run Code Online (Sandbox Code Playgroud)
PS:我添加了一些其他规则,即必填规则和电子邮件,以使新手可以清楚地了解此示例。
Ric*_*las 28
简单的解决方案.
在你的模型中
protected $rules = [
'email_address' => 'sometimes|required|email|unique:users',
..
];
Run Code Online (Sandbox Code Playgroud)
在您的Controller中,操作:更新
...
$rules = User::$rules;
$rules['email_address'] = $rules['email_address'] . ',id,' . $id;
$validationCertificate = Validator::make($input, $rules);
Run Code Online (Sandbox Code Playgroud)
Him*_*Hah 20
有一种优雅的方式来做到这一点.如果您使用的是资源控制器,则编辑记录的链接将如下所示:
/ users/{user}/edit OR/users/1/edit
在您的UserRequest中,规则应如下所示:
public function rules()
{
return [
'name' => [
'required',
'unique:users,name,' . $this->user
],
];
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您编辑记录的链接如下所示:
/用户/编辑/ 1
你也可以试试这个:
public function rules()
{
return [
'name' => [
'required',
'unique:users,name,' . $this->id
],
];
}
Run Code Online (Sandbox Code Playgroud)
从Laravel 5.7起,这很好用
use Illuminate\Validation\Rule;
Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
Run Code Online (Sandbox Code Playgroud)
您也Laravel 8.x可以使用Rule::unique方法
强制唯一规则忽略给定 ID:
use Illuminate\Validation\Rule;
public function update(Request $request, Post $post)
{
$validatedData = $request->validate([
'name' => ['required', 'max:60', Rule::unique('posts')->ignore($post->id)],
]);
$post->update($validatedData);
return redirect(route('posts.index'))->with('status', 'post updated successfully');
}
Run Code Online (Sandbox Code Playgroud)
小智 7
测试以下代码:
'email' => 'required|email|unique:users,email_address,'. $id .'ID'
Run Code Online (Sandbox Code Playgroud)
其中 ID 是表的主 ID
在控制器中执行一步
与 Laravel 9 配合良好
$request->validate([
'name'=>'required|unique:categories,name,'.$id,
]);
Run Code Online (Sandbox Code Playgroud)
如果我了解您想要什么:
'email'=>'required | email | unique:users,email_address,'。$ id。''
在模型更新方法中,例如,应接收带有参数的$ id。
对不起,我的英语不好。
小智 6
你可以试试这个。
protected $rules_update = [
'email_address' => 'required|email|unique:users,email_address,'. $this->id,
'first_name' => "required",
'last_name' => "required",
'password' => "required|min:6|same:password_confirm",
'password_confirm' => "required:min:6|same:password",
'password_current' => "required:min:6"
];
Run Code Online (Sandbox Code Playgroud)
小智 6
最好的选择是在更新数据的唯一验证时尝试一次不需要更多代码
'email' => 'unique:users,email_address,' . $userId,
Run Code Online (Sandbox Code Playgroud)
这里email是字段名, users 是表名, email_address 是你想要唯一的表属性名, $userid 正在更新行 id
小智 5
public function rules()
{
switch($this->method())
{
case 'GET':
case 'DELETE':
{
return [];
}
case 'POST':
{
return [
'name' => 'required|unique:permissions|max:255',
'display_name' => 'required',
];
}
case 'PUT':
case 'PATCH':
{
return [
'name' => 'unique:permissions,name,'.$this->get('id').'|max:255',
'display_name' => 'required',
];
}
default:break;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
经过5.2版测试的更简单的解决方案
在您的模型中
// validator rules
public static $rules = array(
...
'email_address' => 'email|required|unique:users,id'
);
Run Code Online (Sandbox Code Playgroud)
这是解决方案:
更新:
public function controllerName(Request $request, $id)
{
$this->validate($request, [
"form_field_name" => 'required|unique:db_table_name,db_table_column_name,'.$id
]);
// the rest code
}
Run Code Online (Sandbox Code Playgroud)
就是这样。快乐编码:)
小智 5
如果您有单独的规则方法。您可以更轻松地使用以下语法。
public function rules()
{
return [
'email' => "required|unique:users,email,{$this->id}"
];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73430 次 |
| 最近记录: |