我有另一种解决方法;我不知道这是否是任何更好或更坏效果为中心还是风格的角度来看,只知道它适合“胖模型,瘦控制器”的目标:
AppModel.php
public function getTranslatedModelField($id = 0, $field) {
$res = false;
$db = $this->getDataSource();
$tmp = $db->fetchAll('SELECT content from s2h_i18n WHERE model = ? AND locale = ? AND foreign_key = ? AND field = ? LIMIT 1',
array($this->alias, Configure::read('Config.language'), $id, $field)
);
if (!empty($tmp)) {
$res = $tmp[0]['s2h_i18n']['content'];
}
return $res;
}
SomeModel.php
public function afterFind($results, $primary = false) {
foreach ($results as $key => $val) {
if (isset($val['SomeOtherModel']) && isset($val['SomeOtherModel']['id'])) {
$results[$key]['SomeOtherModel']['name'] =
$this->SomeOtherModel->getTranslatedModelField($val['SomeOtherModel']['id'], 'name');
}
// other possible queries for other models and/or fields
}
return $results;
}
1.3中没有更好的解决方案吗? – kicaj 2011-05-21 12:47:12
我不认为2.0中有更好的解决方案。这是**主要的**监督/缺点,它有效地给控制器增加了300%+额外的膨胀,而且它总是令人难以置信的烦恼,因为我一直都在使用多语言网站,几乎所有的模型都使用_Translate_行为,当然有更好的解决方案吗? – brndnmg 2011-10-28 19:25:31