【问题标题】:Laravel complex unique validation brain teaserLaravel 复杂的独特验证脑筋急转弯
【发布时间】:2017-05-30 07:53:00
【问题描述】:

我有一个新工作的任务,但无法找出可行的解决方案,并且有可能的方法来做到这一点。

在我的 cms 应用程序中,我创建了添加页面的选项。可以为多种语言添加页面。所以在我的数据库中我有两个表:

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

page_translations
id, page_id, content, slug, locale

(locale 是语言前缀(en, fr, de ...))

因此,在创建页面时,您需要为您拥有的每种语言填写标题和内容。

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

本质上,这段代码所做的是检查我们正在编辑的页面,并将标题设置为唯一。问题是,好的,它正在工作,你不能添加同名的页面,但是如果标题字段与其他语言标题相同,它也不会编辑页面。

因此,如果我编辑页面并将标题名称设置为 en:Test,并将标题设置为 fr:Test,由于唯一规则,页面将不会编辑.

我需要一种方法来更新所有语言的编辑标题,这些字段可以相同,但不能是同名的两个页面。

【问题讨论】:

    标签: php laravel validation


    【解决方案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,title,' 。 $这个->...

    引号内有一个额外的逗号,请尝试将其删除并再次检查它是否有效

    【讨论】:

      猜你喜欢
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 2014-08-03
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多