我第一次使用Symfony,并且正在使用两种语言(当前)需要前端的项目。虽然框架的i18n功能起步和运行相当简单,但我在网站管理部分遇到了问题。以下是“Page”对象的generator.xml示例:
config:
actions: ~
fields: ~
list:
title: Content Pages
max_per_page: 15
display: [=title, slug]
fields:
title: { label: "Title" }
slug: { label: "Slug" }
sort: [title]
'title'字段是数据库中的可翻译字段,因此当我添加多个Page并转到列表视图时,我收到此错误:
column "title" does not exist
Failing Query: "SELECT p.id AS p__id, p.page_id AS p__page_id, p.enabled AS p__enabled, p.position AS p__position, p.created_at AS p__created_at, p.updated_at AS p__updated_at FROM page p ORDER BY title asc LIMIT 15"
这是可以理解的,因为系统显然试图查询非翻译表。但是,如果我将generator.xml更改为sort [[created_at],则仍会出现上述错误。
有趣的是,如果我更新了max_per_page,那么该更改会反映在查询中(例如“..LIMIT 14”),所以至少有一些文件正在被正确解析。
我已经清除了我的缓存并重新生成了数据库,但我很难过为什么会这样。
有什么想法吗?
答案 0 :(得分:0)
我终于找到了解决这个问题的方法,这是一个有趣的问题。 Symfony将排序顺序存储在会话cookie中,因此虽然我更新了generator.yml文件(并清除了Symfony缓存),但我的会话变量没有受到影响。我从今年早些时候的Symfony-Users讨论中得到了解决方案:
至关重要的是,虽然问题的根本原因是会话cookie,但这意味着对不存在(已翻译)字段的数据库进行查询会导致错误。
我仍然不知道如何按i18n字段排序,但至少我可以再次查看列表页面: - >。
答案 1 :(得分:0)
只需使用peer_method
选项或query_methods
选项。
您可以尝试以下示例:
list:
peer_method: doSelectJoinPageI18n
display: [ id, slug, =title ]
或此样本:
list:
query_methods: [joinI18n]
display: [ id, slug, =title ]
其中一个应该有用。 祝好运!