我一直在搜索互聯網和 Laravel 檔案,試圖讓它發揮作用。
理想情況下,我可以只使用 $request->validate() 方法。但我也嘗試過手動制作和報告錯誤(這讓我更接近了一點,但仍然無法在我需要的任何地方作業)。
這是我的情況。
有人創建了一個帖子。他們創建了一個標題,然后我根據該標題生成了一個 slug。
標題必須是唯一的。這按預期作業。我總是收到一條很好的錯誤訊息,即標題必須是唯一的。
鼻涕蟲也必須是獨一無二的。如果有人命名了一個帖子hello,然后又命名了另一個帖子,這可能會出現問題hello!
<form ...>
<input type="text" name="title" id="title">
</form>
所以他們提交,在我的控制器方法中,在我做任何驗證之前,我將 slug 添加到請求中。
$request->slug = Str::slug($request->title);
然后我嘗試驗證
$request->validate([
'title' => 'required|unique:posts',
'slug' => 'unique:posts,slug'
]);
在Post-1和Post 1或hello和這樣的情況下,hello!我希望slug 的驗證失敗,就像它對標題的驗證一樣。
但相反,它沒有,然后我收到一個 SQL 錯誤
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'post-1' for key 'posts.posts_slug_unique'
我得到了它的作業Validator::make......但僅適用于 store 方法。它仍然無法用于更新。此外,它幾乎沒有那么干凈。
有沒有人看到我做錯了什么?
uj5u.com熱心網友回復:
@uz4ir 為我解決了這個問題。
它可能不是最佳實踐解決方案,但有計劃在未來向表單添加自定義 slug 輸入。所以這個代碼將來會被洗掉。
我查看的其他解決方案似乎要付出更多的努力,此時我看不出將 slug 添加到請求有任何危害。
改變
$request->slug = Str::slug($request->title);
到
$request->request->add(['slug' => Str::slug($request->title)]);
效果很好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312705.html
下一篇:收藏視圖中的收藏品不可見
