问题描述
|
在PHP中,当加载页面时,在没有任何框架的情况下通过MVC模式工作时,再次进行CRUD处理时,文件应转到控制器。那么,如何将视图页面连接到控制器,因为视图页面就像HTML一样简单?控制器通过ActionView呈现视图页面,因此如何将视图页面链接到控制器以进行CRUD处理。
解决方法
每个MVC请求都要经过相同的Controller-> Model-> View周期。从这个意义上讲,每个视图始终都是“联系”控制器,只是不在同一请求中。
用户打开URL
/posts/add
PostsController捕获一些数据并呈现视图
该视图由一个表单组成,可能显示来自控制器的一些数据
最终的HTML发送给用户
一个请求周期到此结束。浏览器显示HTML表单。提交表单时,新请求将发送到服务器。
表格过帐到/posts/add
PostsController抓取数据,使用模型保存
如果一切正常,则控制器将呈现一个“谢谢”页面(或执行其他任何操作)
如果它不起作用,则控制器将再次呈现表单视图,并填充错误消息
最终的HTML发送给用户
这样再次完成了循环。在MVC周期内,视图从不与控制器对话。它只是输出用户看到的HTML。然后,用户向控制器发起新请求。
,说您有以下几点:
/m/User.class.php
/v/newUser.php
/c/UserController.class.php
我通常将其分为三层:一个类中的模型,一个给定业务对象的封装良好的高内聚性类。此类负责用户的对象模型,而控制器负责实现CRUD方法。这样就可以简单地将关注点分离,促进代码重用等。然后,您可以在所需的任何视图中插入控制器,例如说“ newUser.php \”以查看用户。
由于PHP是一种脚本语言,因此需要在使用之前导入依赖项。因此,查看依赖关系树,我通常使用\“ require_once \”将模型导入控制器,并将控制器导入视图。
User.class.php -----
类用户{
私人$ username;
User($newUsername) {
$this->username = $newUsername;
}
}
userController.php ---------------(考虑以下方向“ app”位于PHP INCLUDE_PATH变量下)
require_once(\“ app / m / User.class.php \”);
类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的硕士期间实现了一个大型PHP系统。有关此结构的更完整示例,请访问http://java.net/projects/infinity-metrics/sources/svn/content/trunk/ app / classes / infinitymetrics / controller / UserManagementController.class.php作为控制器的示例。这是使用此控制器的视图示例:http://java.net/projects/infinity-metrics/sources/svn/content/trunk/app/user/student/signup-step1.php。