如何在没有使用某些框架的PHP中的MVC

Geo*_*nis 15 php oop model-view-controller

我有一些(基本可能)模型 - 视图 - 控制器模式的知识,我想用这个创建一个站点.但我觉得如何实际实现它有点令人困惑.我陷入了细节之中.

假设我有一个网站,每个用户都会保留一些待办事项列表.你会怎么做?你会创建什么课程?哪个类将输出HTML,哪个类将作为控制器服务器以及它如何与视图通信以产生输出?等等

对不起,如果它看起来很傻,我想它一定有点容易,但我卡住了.

mag*_*nes 11

作为记录:

在PHP中创建MVC并不困难,它与遵守规则相关,而不是一项难度任务.

a)模型(可选,您可以在PHP中使用数组)

<?php
     class MyModel() {
     }
?>
Run Code Online (Sandbox Code Playgroud)

b)路由(index.php?)

<?php
include "...";
// here we collects all the information, such post,get and path values
$action=...;
$param=....;
switch($controller) {
      case "my": // www.myweb.com/my/action
      include "controller\MyController.php"; // open the right controller.
      break;
}
?>
Run Code Online (Sandbox Code Playgroud)

c)控制器

<?php
include "model\MyModel.php";
switch($action) {
    case "add":
         // here live the logic, information, call for services and such.
         $model=....;
         // and finally...
         include "view\MyView.php";
         break;
}
?>
Run Code Online (Sandbox Code Playgroud)

d)查看

<html>
    <body>
       <?=$model->field;?>
    </body>

<html>
Run Code Online (Sandbox Code Playgroud)

作为一个说明:

a)视图应尽可能干净.认为视图可以由不关心php的网页设计师创建.

b)视图始终是该过程的最后一步.视图Web始终不返回任何内容.


TJH*_*vel 9

没有现有框架就可以做到这一点,只需创建自己的框架.无论如何,这不是一项非常艰巨的任务.

不是特定于应用程序,您的MVC框架必须执行以下操作:

  1. 将所有流量重定向到中央页面,以便正确处理每个请求.
  2. 从请求URL中提取控制器和操作.(例如,对http://yoursite.com/Task/Add的请求,您必须将其转换为TaskController上的Add方法)
  3. 加载控制器类(在我们的示例TaskController中).也许使用Autoload.
  4. 在Controller上调用Add方法
  5. 显示结果

有多种方法可以实现视图,您可以模拟ASPMVC并让每个Controller的操作返回一个ActionResult,它有一个方法Execute.然后重载,ViewResult将负责加载正确的视图,并包括正确的视图ModelData.


shi*_*har 7

以下是RASMUS LERDORF自己提出的问题的准确答案. 仔细阅读.