2010-11-12 33 views
1

好吧我有一個很小的框架,我希望很快就可以開源,我試圖實現命名空間,以便控制器和模型不需要附加文本。這裏的基本代碼邏輯:如何在前端控制器情況下使用PHP命名空間

  • URL請求
  • htaccess的重新路由到的index.php其中發起框架
  • 框架解析路線&確定哪個控制器/動作來實例&火
    • 框架的前控制器是'Controller'&項目控制器擴展'Controller'

所以爲了允許控制器被命名,例如:

class Foo extends Controller {} 

後來的模型是:

class Foo extends Model {} 

我的目錄結構如下所示:

project/ 
    controllers/ 
     foo.php 
    models/ 
     foo.php 

所以,我顯然需要實現命名空間。 (是的,我正在運行PHP 5.3)。所以我的問題是,我將如何實現名稱空間,其中控制器和模型由其他控制器和模型擴展?

+0

有興趣檢查項目,當它完成..! – 2013-05-21 13:10:35

回答

-1

經常檢查php.net ... http://php.net/namespace

+0

我已經閱讀過php的命名空間文檔(是不是通常給定的?),但是,我的問題的性質是特定於前端控制器動態加載/解僱項目控制器的命名空間。這意味着,我不希望使用框架的人必須將Foo擴展爲project \ controllers \ Controller。 '使用project \ controllers \ Foo作爲Foo'是我所需要的,但這不是動態的,並且仍然需要在項目控制器文件中設置。合理? – shanebo 2010-11-12 20:34:11

+0

好吧,但我從來沒有看到(並看到)命名空間的點...只要正確命名類... – dododedodonl 2010-11-13 01:00:10

+1

然後,你可能從來沒有開發的應用程序。有超過10班。 – Crozin 2010-11-14 15:16:10

0

一種方式做到這一點是手動預先考慮命名空間假設你的控制器都生活在同一個空間。以下面的例子。

public function __construct($controller, $model) 
{ 
    $this->controller = 'Application\Controllers\\' . $controller; 
    $this->model  = 'Application\Models\\'  . $model; 
} 

可能有更自動加載的方法,但我認爲這在大多數情況下就足夠了。不要引用我,但也許你可以使用Reflection並獲取被調用對象的名稱空間。但是,這可能仍然需要更獨特的命名慣例,否則自動加載器仍然不知道您是否撥打Controllers\Index.phpViews\Index.php

相關問題