如何对 laravel 表单请求提出条件
Posted
技术标签:
【中文标题】如何对 laravel 表单请求提出条件【英文标题】:How to make conditions on laravel form request 【发布时间】:2018-08-17 14:03:09 【问题描述】:我有一个问题,
我有一个控制器,我有一个表单请求来验证更新。
例如,我想提出条件。如果我更新“名称”,表单请求允许更改名称,但如果我没有进行更改,请使用相同的名称并且不会出现“唯一规则”,因为有时我必须更改名称,但有时不需要更改名称是当我没有更改名称时,因为如果我输入相同的名称,我会收到“重复”的消息,如果我尝试更新另一个 ID,则会出现“重复”。
我不知道你是否理解,但我想具体一点。
我的规则是下一个有条件的。
public function rules()
if (Attribute::where('name', '=', Request::get('name'))->count() == 1)
return [
'name' => 'required'
];
elseif (Attribute::where('name', '=', Request::get('name'))->count() != 1)
return [
'name' => 'unique:attributes'
];
所以我比较了名称计数是否仅需要 ==1,但何时 !=1 仅唯一但无法正常工作。
有什么建议吗?
【问题讨论】:
在更新详细信息时插入和删除唯一规则时只需将名称设为唯一 我在另一个 RequestForm 上有一条规则,在插入时是唯一的,但用户可以更新名称但不使用某些名称,如果他没有更新名称,则可以在没有“重复”消息的情况下插入 使用了哪个 laravel 版本? 我使用的是5.5版本 @FMoreira 我已经添加了我的答案,请试一试:) 【参考方案1】:根据这个答案,
How validate unique email out of the user that is updating it in Laravel?
您可以忽略当前用户详细信息并保留唯一规则,同时在此类规则中验证更新请求,
根据文档,
强制使用唯一规则以忽略给定 ID:
有时,您可能希望在唯一检查期间忽略给定的 ID。例如,考虑一个包含用户名、电子邮件地址和位置的“更新配置文件”屏幕。当然,您需要验证电子邮件地址是否唯一。但是,如果用户只更改名称字段而不更改电子邮件字段,则您不希望引发验证错误,因为用户已经是电子邮件地址的所有者。如果用户提供的电子邮件地址已被其他用户使用,您只想抛出验证错误。要告诉唯一规则忽略用户的 ID,您可以将 ID 作为第三个参数传递:
更新时的规则应该是这样的,
'name' => 'unique:attributes,name,'.$attribute->id
这里,$attribute
指的是正在更新的属性。
希望你能理解。
【讨论】:
此解决方案工作完美,但如何防止用户修改另一个“id”并输入相同的名称。在另一个“id”上,我认为必须首先出现“重复”,我必须创建一个条件(我认为是这样)以防止另一个使用使用相同的名称使用 id,并且名称可能是 @FMoreira 你是如何在表单请求中提供 id 的?【参考方案2】:您可以使用Rule 来检查唯一性
use Illuminate\Validation\Rule;
Rule::unique('table_name')->ignore('id');
【讨论】:
这个解决方案工作完美,非常简单,但我如何防止用户修改另一个“id”并输入相同的名称。在另一个“id”上,我认为必须首先出现“重复”,我必须做出一个条件(我认为是这样)以防止另一个使用使用相同的名称使用 id,并且名称可能是 在更新记录时,您必须在请求中发送 id,以便您可以忽略。 我认为你不明白。我可以正确忽略名称,但如果我在第二个示例中更改 id(例如 attributes/1?name=123123&cat_id=1 for attributes/2?name=123123&cat_id=1 )必须看起来像名称存在(重复)但如果我仅当我不更新第一个案例的名称时才忽略工作 field_name' => 'sometimes|unique:table_name,field_name,ignore_id',你有这样的验证吗? 'name' => ['required',Rule::unique('categories')->ignore($this->name)] 像这样以上是关于如何对 laravel 表单请求提出条件的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过 AJAX 验证 Laravel 表单时出现错误 422