如何在php中MVC而不使用某些框架

2022-08-30 22:01:21

我对模型-视图-控制器模式有一些(也许是基本的)知识,我想用它创建一个网站。但是我发现如何实际实现这一点有点令人困惑。我被困在细节中。

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

对不起,如果它看起来很愚蠢,我想这一定有点容易,但我被困住了。


答案 1

记录在案:

在PHP中做MVC并不难,它更与纪律有关,而不是一项困难的任务。

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

<?php
     class MyModel() {
     }
?>

b) 路线(索引.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;
}
?>

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;
}
?>

d) 查看

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

<html>

请注意:

a) 视图应尽可能干净。认为视图可以由不关心php的Web设计人员创建。

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


答案 2

在没有现有框架的情况下执行此操作是非常可能的,只需创建自己的框架即可。无论如何,这不是一项非常困难的任务。

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

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

有多种方法可以实现视图,您可以模拟 ASPMVC 并让每个控制器的操作返回一个 ,该操作具有一个方法 Execute。然后,重载它将负责加载正确的视图并将其包含在适当的 .ActionResultViewResultModelData


推荐