在PHP中苦苦掙扎。 我關注增長看完這部之後更大: https://www.youtube.com/watch?v=RlfLCWKxHJ0PHP MVC數字萬用表使用路由器,控制器和模型的實用實例
根據毀滅之王我的路由器類應該只知道請求URI來加載適當的Controller類。但是我的Conroller應該知道應該使用哪個Model類和一個View類來呈現數據。或者更好,控制器應該知道ModelFactory將使用選定的數據存儲來處理對象創建。
這一切都打破LoD給我。
所以我的問題是:
- 如何路由器應該初始化控制器類,不知道這 參數需要?即使它是DI容器,我們也不知道 要傳遞給Router內部構造函數的對象參數。如果我們將DI容器傳遞給路由器構造函數(或任何其他類),我們將返回到服務定位器。這應該怎麼做?
也許這是完全錯誤的,但我的出發點是:
// ... retrieve settings, available languages, start session,...
$router = new Router($settings);
$router->loadController();
Router.php
class Router
{
public function __construct(Settings $settings)
{
$this->settings = $settings;
}
// some other methods
public function loadController()
{
try
{
// Loading controller
$controller = $this->getController();
if (is_callable(array($controller, $this->method)) == false)
$this->method = 'init';
// Running controller
$controller->{$this->method}();
}
catch (Exception $e)
{
$e->displayMessage();
}
}
}
而且從這裏我可以做什麼我的控制器類裏面,因爲我需要撥打新模型,新視圖並且必須在構造函數或方法內部明確地執行,這是不好的。
更多的問題:
- 如何,我應該得到模型類的實例在控制器?我應該使用靜態方法來加載視圖?
這是一個很好的例子,正是我想到的。但是,這並沒有給我一個關於如何將模型注入控制器的答案。或者,也許,我只是過於複雜,並且只需要使用新的ModelClass()。在我的特殊情況下,我需要幾個模型在控制器中實例化。此外,我試圖實現數據傳輸層,所以我需要一種動態注入依賴關係的方式。再一次,我會嘗試將它全部移到引導程序,但它不適用於幾個模型類。 – 2015-02-20 17:11:51
在上述解決方案中,您不會。 「模型」類一般將在控制器中啓動。爲了動態注入任何類,您可能需要使用一個好的DI容器。但是,一個異常可能是您的數據庫連接。我會添加更多的答案來說明.. – user2430012 2015-02-21 11:38:58