从php中的视图调用控制器操作

时间:2011-05-26 02:04:36

标签: php model-view-controller

在PHP中,当加载页面时,在没有任何框架的情况下使用MVC模式,再次进行CRUD处理时,文件应该转到控制器。那么如何将视图页面连接到控制器,因为视图页面像HTML一样简单? Controller通过ActionView渲染视图页面,以便视图页面如何链接到控制器以进行CRUD处理。

2 个答案:

答案 0 :(得分:1)

每个MVC请求都通过相同的控制器 - >型号 - >查看循环。从这个意义上说,每个视图总是“联系”一个控制器,而不是在同一个请求中。

  1. 用户打开网址/posts/add
  2. PostsController抓取一些数据并呈现视图
  3. 视图包含一个表单,可能显示来自控制器的一些数据
  4. 将最终HTML发送给用户
  5. 一个请求周期在这里结束。浏览器显示HTML表单。提交表单时,会向服务器发送新请求。

    1. 表单已发布到/posts/add
    2. PostsController抓取数据,使用模型保存它
    3. 如果一切正常,控制器会呈现“谢谢”页面(或其它任何其他内容)
    4. 如果它不起作用,控制器将再次呈现表单视图,并填充错误消息
    5. 将最终HTML发送给用户
    6. 这再次完成了循环。视图从不与MVC循环内的控制器通信。它只输出用户看到的HTML。然后,用户向控制器发起新请求。

答案 1 :(得分:0)

说你有以下内容:

/m/User.class.php /v/newUser.php /c/UserController.class.php

我通常将它们分解为3层:类中的模型,给定业务对象的封装良好的高内聚类。虽然此类负责用户的对象模型,但控制器负责实现CRUD方法。这样可以简单地分离关注点,促进代码重用等。然后,您可以将控制器插入所需的任何视图,例如“newUser.php”来查看用户。

由于PHP是一种脚本语言,因此您需要在使用之前导入依赖项。因此,查看依赖关系树,我通常使用“require_once”将模型导入控制器,并将控制器导入视图。

User.class.php ----- class User {    private $ username;

 User($newUsername) {
     $this->username = $newUsername;
 }

}

userController.php ---------------(考虑下面的方向“app”在PHP INCLUDE_PATH变量下)

require_once( “应用程序/米/ User.class.php”);

class UserController {

public static createUser($newUsername) {
    return new User($newUsername);
}

}

newUser.php ----------(考虑下面的“app”方向是在PHP INCLUDE_PATH变量下)

require_once("app/c/UserController.class.php");

$newUser = $UserController.createUser("username");

echo "<b>" . $newUser;

除此之外,我使用像Propel这样的ORM系统为用户提供持久性。我在使用Propel和手动MVC的Masters中实现了一个大型PHP系统...有关此结构的更完整示例,请转至http://java.net/projects/infinity-metrics/sources/svn/content/trunk/app/classes/infinitymetrics/controller/UserManagementController.class.php获取Controller的示例。以下是使用此控制器的视图示例:http://java.net/projects/infinity-metrics/sources/svn/content/trunk/app/user/student/signup-step1.php