2017-01-15 39 views
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:測試,該頁面將不會因爲獨特的規則的修改。

我需要一種能夠更新所有語言的編輯標題的方法,這些字段可以是相同的,但它不能是具有相同名稱的兩個頁面。

回答

-1

我想有一個錯字在你的代碼

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; 
    } 

錯字在這裏

...獨特:page_translations,標題,」。 $ this - > ...

一個額外的逗號在報價中,嘗試刪除它,並再次檢查它是否工作