2017-01-15 4 views
0

私は新しい仕事で仕事を得ているし、その解決策を理解することができないし、これを行う方法もある。ララヴェル独特の妥当性検証の脳ティーザー

私のアプリケーションでは、ページを追加するオプションを作成しました。複数の言語のページを追加できます。だから私のデータベースに私は2つのテーブルがありますので、(ロケールは、言語の接頭辞(EN、FR、デ...)である場合)

pages 
id, is_default, page_parent, published, created_at, updated_at, deleted_at 

page_translations 
id, page_id, content, slug, locale 

を、作成ページに、あなたはタイトルと内容を入力する必要がありますあなたが持っている言語ごとに

管理者ユーザは、同じタイトルを持つ2つのページを作成することはできないはずですので、私は、ルール作成:基本的に

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

、コードのこの作品は、私たちが編集しているページをチェックしてやっていることを、そして一意になるようにタイトルを設定します。問題は、OKです。同じ名前のページを追加することはできませんが、タイトルフィールドが他の言語のタイトルと同じであればページを編集することもできません。

だから私はページを編集し、アンのタイトル名を設定した場合:のテスト、タイトルFR:テストは、ページがあるため、固有のルールを編集することはありません。

すべての言語の編集時にタイトルを更新できる方法が必要です。これらのフィールドは同じにすることはできますが、同じ名前の2つのページにすることはできません。

答えて

-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 - > ...

余分なカンマが引用符で囲まれている場合は、削除してもう一度チェックしてください。

関連する問題