Inf*_*ien -3 php model-view-controller dependencies dependency-injection inversion-of-control
我有一个简单的PHP MVC框架,它以这种方式工作:
StaticFramework (1)
|
V
DIC (2)
|
V
HTTPRequest
|
V
App <-> Router
|
V
Controller <-> Model
|
V
View
|
V
HTTPResponse
Run Code Online (Sandbox Code Playgroud)
(1) StaticFramework是一个静态的"前端控制器",它给出了App它的默认依赖性(2) DIC(依赖注入容器),它的工作方式与Pimple类似.可以访问容器以更改这些默认依赖项.例如,Router类被注入App了DIC.
我有一个问题,因为它是一个MVC应用程序,我有3个重要的层:
注入View很容易,因为它只是一个有一个render呈现PHP或HTML文件的方法的类,所以我只需要View在我的注入一个实例Controller.
但注入Model的Controller似乎更难.每个Model都是一个单独的类,所以我不能像我那样注入它View.每个人Model也可能需要其他依赖,例如a Database或XML类.
此外,我无法预测Controller将需要哪些型号,因为它可能需要其中的几种,例如,ArticleController需要ArticleModel和UsersModel.
我有几个解决方案:
ModelFactory在一个类中注入Controller将为其设置模型的类Controller.但是因为每个人Model可能需要不同的依赖关系,所以ModelFactory必须知道它需要哪一个,这似乎与PimpleDIC相似;Controller,并将每个模型作为单独的类,将其扩展到所需的范围.例如,如果需要MySQL连接,则Model应该扩展Database.但这意味着模型与其父级紧密相关,并且它使得无法Model使用模拟类或具有多个数据源,例如,如果Model需要两者Database并且XML?那么,Controller在我的框架中注入模型的最佳方法是什么?
提前感谢您的回答.
下面的神,这让我很伤心.
</rant>
您的控制器应该与之交互Services.该模型包含持久性抽象,域实体,服务,存储库以及用于描述应用程序业务逻辑的内容.
无论如何,要使用必要的服务填充控制器,您应该使用适当的依赖注入器.我建议使用Auryn(基于反射)或Symfony DI(基于配置).