【发布时间】: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