Rap*_*ure 12 php laravel laravel-5 laravel-validation laravel-request
我目前有一个具有文本字段和段塞字段的模型.
我验证了slug在我的表单请求类中是唯一的:
public function rules()
{
return [
'name' => 'required|min:3',
'slug' => 'required|alpha_dash|unique:questions'
];
}
Run Code Online (Sandbox Code Playgroud)
这在创建时工作正常,并且正确地拒绝创建重复的slugs.但是在我的更新方法中,它不会让我保存记录,因为slug已经存在.当然slug确实存在,但它存在于正在编辑的记录中,所以我想继续允许它被保存.但是,它不应该被改为另一个记录上的slu ..
这是我的更新ArticlesController方法的样子:
public function update(Article $article, ArticleRequest $request)
{
$article->update($request->all());
return redirect('articles');
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让这个工作在L5?
尝试修改您的规则,如下所示(在表单请求类中):
public function rules()
{
return [
'name' => 'required,min:3',
'slug' => 'required|alpha_dash|unique:categories,slug,'.$this->id')
];
}
Run Code Online (Sandbox Code Playgroud)
这个对我有用。
在唯一规则中,您可以指定要忽略的 id。
您可以创建 2 个单独的请求(一个用于创建,一个用于更新),但您也可以通过这种方式检查是否已设置(我假设您的更新网址如下所示/questions/2):
public function rules()
{
$rules = [
'name' => 'required|min:3',
'slug' => ['required', 'alpha_dash']
];
$rule = 'unique:questions';
$segments = $this->segments();
$id = intval(end($segments));
if ($id != 0) {
$rule .= ',slug,' . $id;
}
$rules['slug'][] = $rule;
return $rules;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9203 次 |
| 最近记录: |