我正在處理一個小的CakePHP應用程序,該應用程序受到以下約束(很尷尬,但超出了我的控制範圍):我需要它在兩個相同的數據庫中任一個上工作,並且選擇基於URL。例如:CakePHP - 選擇基於路由或url的數據庫配置?
http://www.example.com/myapp/foo/action/param
http://www.example.com/myapp/bar/action/param
第一個明顯的解決方案是讓在myapp/foo
和兩條相同的CakePHP應用myapp/bar
與不同的數據庫配置。儘管如此,我仍然覺得這很有趣,所以我試圖找到創建單個應用程序的優雅方式。
我正在考慮的方法是:定義路線,使myapp/foo
和myapp/bar
將與相同的控制器相關聯。然後給我DATABASE_CONFIG
類的構造函數:(這裏當然我已經定義了兩個數據庫fooConfig
和barConfig
)
function __construct() {
$pathParts = explode('/', $_SERVER['REQUEST_URI']);
if (array_search('foo', $pathParts)) {
$this->default = $this->fooConfig;
} else if (array_search('bar', $pathParts)) {
$this->default = $this->barConfig;
}
}
我有過的URL控制,所以我可以確信不會有在URL中多出現foo
或bar
。
我的問題是:是否有更簡單,更優雅的方式來處理這種奇怪的情況?或許在AppModel
和/或AppController
?雖然我擺脫了重複的代碼,但我不能動搖我用另一種代碼替換一種代碼氣味的感覺。
您還可以找到各種方法來幫助您使用像Model :: setDataSource() –
+1這樣的數據源操作來獲得甜美的代碼。我會玩這個。 (也...歡迎!) – eaj
這最終使我得到了一個合理的解決方案,謝謝。 – eaj