我有另一種解決方法;我不知道這是否是任何更好或更壞效果爲中心還是風格的角度來看,只知道它適合「胖模型,瘦控制器」的目標:
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