0
我得到了一份新工作的任務,並找不到解決方案的工作,也有一種可能的方式來做到這一點。Laravel複雜的獨特驗證腦傳情
在我的cms應用程序中,我創建了添加頁面的選項。可以爲多種語言添加頁面。所以在我的數據庫中,我有兩個表:
pages
id, is_default, page_parent, published, created_at, updated_at, deleted_at
page_translations
id, page_id, content, slug, locale
(其中locale是語言前綴(英語,法語,德...))
因此,在創建頁面,您需要填寫標題和內容對於你有的每種語言。
admin用戶不應該能夠創建兩個頁面具有相同的標題,所以我創建了一個規則:
private function generateRules() {
foreach (\App\Models\SiteLanguages::all() as $language) {
$page = $this->getPageInfoFromRequestByLanguage($language);
$rules[$language->code. '.title'] = 'required|unique:page_translations,title,' . $this->generateRuleAppendix($page);
}
return $rules;
}
private function getPageInfoFromRequestByLanguage($language) {
return $this->get($language->code);
}
private function weAreEditingPage($page) {
return key_exists('id', $page);
}
private function generateRuleAppendix($page) {
$append = '';
if ($this->weAreEditingPage($page)) {
$append = ',' . $page['id'];
}
return $append;
}
從本質上講,這段代碼做的是檢查我們正在編輯頁面,設置標題是唯一的。問題是,好的,它正在工作,你不能添加具有相同名稱的頁面,但是,如果標題字段與其他語言標題相同,它也不會編輯頁面。
所以,如果我編輯的頁面和設置標題名稱恩:測試和標題FR:測試,該頁面將不會因爲獨特的規則的修改。
我需要一種能夠更新所有語言的編輯標題的方法,這些字段可以是相同的,但它不能是具有相同名稱的兩個頁面。