如何在不使用某些框架的情况下在 php 中进行 MVC

Posted

技术标签:

【中文标题】如何在不使用某些框架的情况下在 php 中进行 MVC【英文标题】:How to MVC in php without the use of some framework 【发布时间】:2011-11-10 14:57:29 【问题描述】:

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

假设我有一个网站,每个用户都保存一些待办事项列表。你会如何处理这个问题? 你会创建什么类?哪个类将输出 html,哪个类将作为控制器服务,以及它将如何与视图通信以产生输出?等等

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

【问题讨论】:

tutorialzine.com/2011/08/jquery-mobile-product-website 不是待办事项列表网站,而是使用 MVC 模式的网站。 照常写,然后转入MVC。这样做几次,您很快就能从项目一开始就使用 MVC 模式。 【参考方案1】:

虽然您的问题有点过于宽泛,但我想我可以提供一些帮助。

当我开始使用框架时,我遇到的第一个问题是:我应该使用哪个框架(如果有的话)?在您的情况下,我不会尝试在没有预制框架的情况下构建 MVC 网站。您最终要编写的大部分架构已经完成了数十次。

DB 抽象、登录系统等东西写起来很无聊。还不如使用已经拥有这些东西的框架。

我强烈推荐这本书:http://www.amazon.com/Building-Applications-Symfony-Cakephp-Framework/dp/0470887346/ref=sr_1_2?ie=UTF8&qid=1315227178&sr=8-2。它将引导您使用三种不同的 PHP MVC 框架构建一个简单的 MVC 网站。读完本书后,您将对每个框架都有足够的经验,以便您可以选择最喜欢的框架。

或者,如果您想编写自己的框架以便了解它是如何完成的,我建议您使用 TJHeuvel 的答案。另一种选择是阅读现有框架的源代码,以便了解其他人是如何实现它的。

【讨论】:

【参考方案2】:

在没有现有框架的情况下很可能做到这一点,只需创建自己的框架即可。无论如何,这不是一项非常艰巨的任务。

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

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

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

【讨论】:

【参考方案3】:

Kheldar 的评论很有道理。本教程实际上涵盖了使用 MVC 模式制作微框架。

尽管您需要添加它 - 就添加自定义路由和某种路由引擎而言,但除此之外,这是开发您自己的 MVC 框架的一个非常好的婴儿步骤。..

【讨论】:

【参考方案4】:

这是 RASMUS LERDORF 本人对您的问题的准确回答。 Read through。

【讨论】:

看起来像talks.php.net/presentations/slides/mvc/example/model/db.phps 这样的嵌入式代码示例不起作用。目前,它显示“欢迎使用 PHP 演示系统。这里我们列出了存储在该系统中的所有可用演示类别。”。有没有人完整备份 PHP 创建者的教程? 过时的文章【参考方案5】:

阅读以下 Symphony 网络简介: http://symfony.com/doc/current/book/from_flat_php_to_symfony2.html

【讨论】:

感谢分享链接。非常适合初学者阅读。【参考方案6】:

记录在案:

在 PHP 中做 MVC 并没有那么难,它更多地与自律有关,而不是一个困难的任务。

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

<?php
     class MyModel() 
     
?>

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;

?>

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 的网页设计师创建。

b) 视图始终是流程的最后一步。视图 web 总是什么都不返回。

【讨论】:

未使用框架创建的 MVC 博客示例的 PHP 源:github.com/kaurov/BlogNoFrameworkMVC

以上是关于如何在不使用某些框架的情况下在 php 中进行 MVC的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用循环的情况下在 PHP 中向多维添加新的键和值......?

如何在不使用 ajax 刷新的情况下在我的页面上显示我的 php 响应?

如何在不使用 Api 的情况下在 uitableview 中进行分页?

如何在不知道维度的情况下在 C++ 中传递二维数组 [重复]

如何在不修改 HTML 的情况下在 jQuery 中添加指向伪元素的链接? - 更新 > Functions.php

如何在不将其添加到目录的情况下在多个团队中安装机器人?