在同一條船上一個當時一段時間以前。最後沒有使用Doctrine的ORM,但基本上你是對的 - 對於不是通過Doctrine的實體和存儲庫直接建模的東西,你需要一個「服務層」。
我這樣做的目的是在/ application /爲我的項目代碼創建名稱空間文件夾。然後我使用Doctrine Common的類加載器將該文件夾識別爲命名空間。例如/application/Acme/Authentication.php包含:
namespace Acme;
class Authentication {
//Do Doctrine queries in various methods here
}
主義的類加載器使用SPL(spl_autoload_register或東西)內部。這意味着你可以完全使用PHP 5.3命名空間。然後,您將獲得所有有關依賴注入的有趣嘗試和磨難,以訪問此服務層中的doctrine dbal。您的控制器將直接使用這個「服務層」。就像我說的,在我的情況下,我決定不使用Doctrine的ORM - 所以我在我的「服務層」中使用CodeIgniters ActiveRecord數據庫類。而不是使用$ this-> CI = & get_instance()...我使用DI容器爲構造函數提供數據庫訪問。
舉例來說,在我的認證/登錄控制器動作我可能
function login() {
$user = $_POST['u'];
$pass = $_POST['p'];
$auth = new Acme\Authentication($this->db); //or use a DI container
$user = $auth->authenticate($user, $pass);
....
}
感謝您的回答! 我帶來了一個對我來說看起來更清潔的不同解決方案。 我現在要佈置我的解決方案。 – Cidro