设计师: TABLENAME:设计师 ACTAS: 的I18n: 字段:[名称] 列: ID: 类型:整数(2) 无符号:真 初级:真 自动增量:真 名: 类型:字符串(30) NOTNULL:真如何在教义中制作鬼域?
虽然默认I18n
行为,必须使用这样
$d = Doctrine_Query::create()
->select('id, t.name')
->from('Designer d')
->leftJoin('d.Translation t')
->where("t.lang = 'en'")
->execute();
我将一些常数设置为当前语言faaar更方便,说en
,和具有每i18nable
字段对应于它的,因此具有这样的查询
$d = Doctrine_Query::create()
->select('id, name')
->from('Designer d')
->execute();
相当于上面之一。
我试图做一个新的行为,扩展默认的,可以提供这样的事情,但我需要你的帮助。
获取所需的语言非常简单,所以我们假设有define('LANGUAGE', 'en')
。基本行为类是
class TransparentI18N extends Doctrine_Template
{
private $_translation = NULL;
public function setUp()
{
$this->addListener(new TransparentI18NListener());
$this->actAs(new Doctrine_Template_I18n($this->_options));
}
}
这样的想法是添加一个监听器,每当这些领域存在的SELECT子句中,将修改查询,设置连接并选择所需的字段。 TransparentI18NListener
包含preDqlSelect
,它接收Doctrine_Event
对象。我可以得到相关的Doctrine_Query
甚至getDqlPart('select')
的作品,但后者返回原始选择字符串,如id, t.name
,我怎样才能得到,每个子句对应哪个表?
然后,我必须设置Doctrine_Record
实例的字段。 是否有可能没有让模型扩展一些自定义的类,会给这样的功能?我真的不愿意添加这样的类,但万一其他失败,我应该能够保存这些字段并覆盖__get
方法来显示翻译字段,如果他们被请求。
我太害怕想到插入/更新/删除部分,但希望如果我处理上述问题,我可以添加挂钩到dql并完成工作。
你是否认为这样的想法一般来说是可能的,而不会干扰核心原则库?在默认情况下使用它将是一个巨大的痛苦* ...
您是否设法完成此模板?我正在寻找完全一样的东西 – ZolaKt 2011-05-01 14:56:51