2013-01-05 71 views
1

這可能有點難以理解,所以如果這不夠清楚,我提前道歉。簡單的方法來傳遞對象屬性到下一個

我正在編寫自己的MVC框架,並再次陷入困境。

我正在編寫框架的控制器類的過程。基本上,這是如何工作的:

  • 實例化類coreController延伸抽象類
  • coreController設置爲通過解釋查詢字符串
  • 存儲在變量
  • 查詢字符串值
  • 其它變量分配的值
  • 加載控制器
  • 新控制器加載
  • 新控制器檢查是否需要實例化動作對象。
  • 新操作控制器已加載
  • 操作控制器檢查它是否是所需的最終對象。
  • 在腳本的其餘部分期間,操作控制器將作爲要引用的對象返回。

通用$ controller-> method()可以被調用並引用最終的控制器加載。

另一個概述:

coreController 
    pageController 
     pageControllerActionAdd 
     return as object to start 

$controller->something(); //References pageControllerActionAdd 

Esentially什麼,我希望能夠做的是能夠輸入一個URL,如: http://www.mywebsite.com/page/modify/

,並有腳本拉起了PageModifyController作爲這樣的變量I可以執行它的方法。

如果你能告訴我一個更好的方法,我在做什麼,請繼續。你不必編寫任何代碼,只是這個想法會很棒。只是我目前的做法很混亂,很難調試。我最終會得到多個嵌套對象,我不喜歡這個概念。

我一直在閱讀很多其他源代碼,發現它也可能相當複雜。

+0

那麼,我已經正式從一個簡單的框架升級。 – Sam

回答

1

我實際上創建了一個框架,沿着你試圖實現的路線工作。我認爲你缺少的是一個RoutingHandler類。路由是URL的物理操縱,它告訴您的應用程序加載哪個Controller以及要運行哪個Action。

在我的世界我也有模塊,因此基本的路由方案是

Module -> Controller -> Action 

這三項映射到以那種方式我的URI方案。變量可以附加也像這樣......被解析的URI後

http://www.domain.com/module/controller/action/var1/val1/var2/val2

那麼,會發生什麼,並且控制傳遞到適當的控制器和行動?讓我們編一些代碼來演示一個簡單的例子...

<?php  
    class indexController extends Controller { 

     protected function Initialize() { 
      $this->objHomeModel = new HomeModel; 

      $this->objHeader = new Header(); 
      $this->objFooter = new Footer(); 

      $this->objHeader 
       ->SetPageId('home'); 
     } 

     public function indexAction() { 
      $this->objHeader->SetPageTitle('This is my page title.'); 
     } 

     // other actions and/or helper methods... 
    } 
?> 

Initialize方法,我設置了一些控制範圍內的東西,抓住我的模型的實例以供以後使用。真正的肉在indexAction方法。這是您將在View中設置要使用的內容的位置。例如...

public function randomAction() { 
    $this->_CONTROL->Append($intSomeVar, 42); 
} 

_CONTROL是我操縱和傳遞到查看值的陣列。 Controller類知道如何爲View查找正確的模板,因爲它是以Action(和在同級目錄中)命名的。

Controller父類所執行的操作方法的名稱,並解析它像這樣...

indexAction -> index.tpl.php 

你也可以做一些其他有趣的東西在這裏,例如...

Application::SetNoRender(); 

...會告訴控制器不要在模板內渲染,但只需完成該方法。這對於實際上不想輸出任何內容的情況很有用。

最後,所有的控制器,模型和視圖活得像這樣自己的模塊目錄內...

my_module 
    controllers 
     indexController.class.php 
     someotherController.class.php 
     : 
     : 
    models 
     HomeModel.class.php 
     : 
     : 
    templates 
     index.tpl.php 
     someother.tpl.php 
     : 
     : 

爲我所需要的,這意味着我可以出去單獨的功能我可以有許多模塊由模塊和/或控制器完成。

我可以繼續下去,但是我從記憶中寫下這個,並且在這裏和那裏都有一些皺紋,但是希望這可以讓你思考。

+0

這是一個特殊的回覆。謝謝。我很驚訝你的MVC框架和我的想法有多相似。我的_CONTROL操作方式相同,只是名稱不同!你用SetNoRender做的事情很有趣。我只是剛剛進入靜態方法,所以我仍然在試圖找到它們的實際用途。即使在閱讀你的答案時,我想我已經弄清楚了我將如何去做。即使只看到「RoutingHandler類」也幫了我很多。再次感謝。 – Sam

+0

不客氣。如果有任何鼓勵的話,我應該補充說我的框架已經發展了3年,以獲得現在的位置。它現在生活在幾個生產基地,並且仍然運作良好。哦...祝你好運。 –

+1

謝謝伊恩。我知道將它變爲「可發佈」狀態需要很多工作,但我想手動完成,而不僅僅是安裝drupal/joomla等。我喜歡挑戰,我想知道如何工作。我是擁有自己解決方案的堅持者。我一直在使用初始控制器逐步解釋URI,每次加載新對象。我認爲路由器會幫助很多,因爲我可以直接跳到必要的目標。 – Sam

相關問題