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

在php中从视图调用控制器操作,php,model-view-controller,Php,Model View Controller,在PHP中,当加载页面并再次进行CRUD处理时,在没有任何框架的情况下通过MVC模式工作时,文件应转到控制器。那么,如何将视图页面连接到控制器,因为视图页面像HTML一样简单?控制器正在通过ActionView呈现视图页面,因此视图页面将如何链接到控制器以进行CRUD处理。假设您有以下内容: /m/User.class.php /v/newUser.php /c/UserController.class.php 我通常将它们分为3层:类中的模型,一个针对给定业务对象的封装良好的高内聚类。虽然此类

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

假设您有以下内容:

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

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

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

User.class.php----- 类用户{ 私有$username

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

userController.php-------------------(考虑到下面的方向“app”在php INCLUDE\u PATH变量下)

需要_一次(“app/m/User.class.php”)

类用户控制器{

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

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

require_once(“app/c/UserController.class.php”);
$newUser=$UserController.createUser(“用户名”);
“回声”$新用户;

除此之外,我还使用了一个类似于Propel的ORM系统来为用户提供持久性。在我的硕士学位期间,我用Propel和手动MVC实现了一个大型PHP系统。。。有关此结构的更完整示例,请参阅控制器示例。下面是使用此控制器的视图示例:。

每个MVC请求都经过相同的控制器->模型->视图周期。从这个意义上说,每个视图总是“联系”一个控制器,只是不在同一个请求中

  • 用户打开URL
    /posts/add
  • PostsController获取一些数据并渲染视图
  • 视图由一个表单组成,可能显示来自控制器的一些数据
  • 最终的HTML将发送给用户
  • 一个请求周期到此结束。浏览器将显示HTML表单。提交表单时,会向服务器发送一个新请求

  • 表单已发布到
    /posts/add
  • PostsController获取数据,并使用模型保存数据
  • 如果一切正常,控制器将呈现一个“谢谢”页面(或其他任何页面)
  • 如果不起作用,控制器将再次呈现表单视图,并填充错误消息
  • 最终的HTML将发送给用户

  • 这再次完成了循环。视图在MVC周期内从不与控制器对话。它只输出用户看到的HTML。然后,用户向控制器发起一个新请求。

    在适当的MVC中,您不会从视图调用控制器,因为视图不应该涉及任何业务逻辑。你能更详细地解释一下你想做什么吗?控制器决定返回给用户的视图,不是相反。事实上我有MVC模式,表单页面在视图中呈现。现在我希望插入后的数据应该存储在数据库中。为此,我必须将视图页面连接到控制器,以便我可以存储数据或执行任何crud过程。所以你能告诉我如何做吗。是的,我完全同意你的观点但是控制器是如何从视图字段中获取数据的?有什么逻辑吗?我认为您需要首先了解HTML表单的基础知识。控制器不是从视图获取数据,而是从HTTP请求获取数据。请先尝试创建一些没有MVC的简单HTML表单,可能需要阅读教程。
    require_once("app/c/UserController.class.php");
    
    $newUser = $UserController.createUser("username");
    
    echo "<b>" . $newUser;