PHP MVC结构放置自己的类

时间:2015-04-18 10:48:54

标签: php model-view-controller structure

我刚开始看一下MVC模式。 我的问题是:

我将把我的其他类文件(数据库,用户,记录器,邮件程序等)放在哪里?我应该为它们创建一个新目录,例如libs

我应该在Controller函数中的model中实例化类吗?

<?php

class Controller {
    protected function model($model) {
        require_once('../app/models/'. $model .'.php');

        return new $model();
    }

    protected function view($view, $data = []) {
        require_once '../app/views/'. $view .'.php';
    }
}

2 个答案:

答案 0 :(得分:3)

  

我将把我的其他类文件(数据库,用户,记录器,邮件程序等)放在哪里?我应该为它们创建一个新目录,例如libs

将它们放在单独的文件中,因为它们都提供不同的功能应该没问题。目录命名没有区别 - 只要它符合项目或一般命名约定(可能更好)。

  

我应该在模型函数中实例化Controller中的类吗?

不。据我所知,流程可能类似于:

  1. index文件接收请求并启动新的bootstrap实例
  2. bootstrap设置throwable处理程序和路由器
  3. router然后根据请求方法调用相应的方法,并通过匹配一组路由提供uri
  4. 匹配route初始化MVC三元组的所有组件和可调用方法。组件(Model图层,View图层和Controller图层)将传递给router调用的方法。在我的情况下,我将课程FrontController称为方法init
  5. 基本上,init是MVC三元组实际制作的地方。 Model图层负责业务逻辑,持久性等。请务必注意Model不是单个文件或类(ViewController相同) 。 View图层和Controller图层都会咨询Model图层以执行相应的操作。 View图层的任务是管理输出,例如,确定输出将Content-Type application/jsontext/plain Template,或Views } 渲染。此外,Templates不是Views,用于显示数据。请注意,Model直接从Controller图层询问必要的数据;没有任何与Controller层的互动。最后,当需要交互时,Controller层会介入,例如,用户提交表单,相应的Model过滤输入并从中调用方法{{1}}图层。

答案 1 :(得分:1)

由于MVC有三个主要部分,我建议(并注意到市场上几乎所有框架都这样做)创建三个组件中每个组件的目录,并将这些类放在适当的目录中。

关于其他组件,Database是一个实用程序,可以放在lib目录中,User是一个模型,可以转到model文件夹,Logger / Mailer也可以转到lib文件夹。这些都是示例,而不是严格遵循的内容。

对于实例化,每个Controller可以定义它所依赖的modelslibraries的列表,并让MVC框架处理这些对象的初始化。您以这种方式遵循dependency injection模式。