2010-11-12 37 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

相关问题