为什么这种独特的Laravel验证不起作用?



我一直在网上和laravel文档中搜索,试图让它工作。

理想情况下,我可以只使用$request->validate()方法。但我也尝试过手工制作和报告错误(这让我更接近了一点,但仍然不能在我需要它的地方工作)。

我的情况是这样的。

有人创建了一个帖子。他们创建了一个标题,我根据这个标题生成了一个slug。

标题必须是唯一的。这是预期的工作。我总是得到一个很好的错误消息,标题必须是唯一的。

蛞蝓也必须是唯一的。如果有人将一个帖子命名为hello,然后将另一个帖子命名为hello!,这可能是一个问题

<form ...>
<input type="text" name="title" id="title">
</form>

他们提交了,在我的控制器方法中,在我做任何验证之前,我添加了段符到请求中

$request->slug = Str::slug($request->title);

然后我尝试验证

$request->validate([
'title' => 'required|unique:posts',
'slug' => 'unique:posts,slug'
]);

Post-1Post 1hellohello!等情况下,我希望对段塞的验证失败,就像对标题的验证一样。

但是,它没有,然后我得到一个SQL错误

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'post-1' for key 'posts.posts_slug_unique'

我得到它与Validator::make工作…但只有存储方法。它仍然无法进行更新。而且,它也不是那么干净。

有人看到我做错了什么吗?

@uz4ir已经为我修复了。

这可能不是最佳实践解决方案,但是有计划在将来向表单添加自定义的段塞输入。因此,这段代码将在将来被删除。

我看到的其他解决方案似乎要花费更多的精力,而且我看不出在此时将slug添加到请求中有什么害处。

改变
$request->slug = Str::slug($request->title);

$request->request->add(['slug' => Str::slug($request->title)]);

伟大工作。

相关内容

  • 没有找到相关文章

最新更新