Cra*_*son 8 php model-view-controller
我有一个简单登录表单的以下数据流.
用户访问控制器PHP文件.控制器包括model.php和view.php
用户提交表单,控制器将POST数据发送到模型方法,并返回结果.
用户登录,并由控制器转发到不同的视图(登录成功消息).
目前我的观点是静态HTML(没有PHP),所以这是我的问题.然后向用户传递欢迎信息的正确方法是什么,例如"Hello,Craig!"?
视图是否允许PHP片段,例如
<?php echo $username; ?>
Run Code Online (Sandbox Code Playgroud)
既然模型在控制器文件中加载之前呢?
谢谢!
编辑:更好的做法是允许视图访问特定的类方法,例如
<?php $user->getUsername(); ?>
Run Code Online (Sandbox Code Playgroud)
而不仅仅是变量?
基于其他答案,我发现了一篇非常有用的文章,您可能也会感兴趣.
http://www.nathandavison.com/posts/view/7/custom-php-mvc-tutorial-part-5-views
ter*_*ško 19
以下是您必须考虑的一些事项:
如上所述,MVC和MVC启发模式中的视图负责表示逻辑.这包括显示错误消息和分页等内容.为此,每个视图都可以处理多个模板.
视图从模型层接收信息,并相应地采取行动.模型层中的信息如何在视图中结束的方式是MVC-ish模式中最重要的差异之一:
经典的MVC模式
当模型状态发生变化时,模型层中的结构将信息发送到视图.这是通过观察者模式完成的.
Model2 MVC和HMVC模式
View可以直接访问模型层,并可以从中请求信息.这是最接近原始模式的.
MVVM和MVP模式
View通过控制器接收信息,控制器又从模型层请求它.模式的进一步差异源于在将数据传递给视图之前对数据的处理方式.
你现在看起来实际上只是一个模板.与此类似,本文对此进行了描述.您最终得到的结构无法包含表示逻辑.从长远来看,这将导致表示逻辑被推入控制器.
要显示欢迎消息,您的视图应从模型层请求当前用户的名称.如果模型层返回某种错误状态,则视图选择错误消息模板并插入布局.
如果从模型层检索到用户的名称没有问题,则查看选择包含问候语的模板,在模板中设置值并呈现它.
控制器应初始化模型和视图的想法来自对MVC的非常原始的解释.模式知道为页面控制器,它试图直接在静态网页上移植MVC.
在我看来,这应该是顺序:
模型
您初始化结构,通过它您将处理模型层.它很可能是某种服务工厂,它可以让你构建诸如Authentication登录Library服务和处理文档服务之类的东西.像这样的东西.我之前对模型层的结构写了一些长篇评论.你可能会发现它很有用.
视图
您可以根据从路由机制收集的信息创建视图实例.如果要实现Model2或HMVC,那么您的视图将需要构造函数中的Service Factory实例.
如果要实现MVVM或MVP,则视图的构造函数没有特殊要求.
调节器
这是您创建的最后一个结构,因为控制器负责向视图和模型层发送命令,然后更改然后更改两者的状态.因此,控制器应该期望在构造函数中接收视图和服务工厂.
初始化MVC的基本元素后,在控制器上调用方法,并呈现当前视图.
请记住,这是非常简化的描述.
你可以在你想要的视图中放置任何东西,但是为了更好地遵循MVC的做法,你应该将视图中的PHP限制为简单的echos或prints(也可能是非常小的循环,尽管即使是那些也可以在控制器/模型中预先计算出来的.由于这是获取动态内容的唯一方法,因此说它们不被允许会有点愚蠢.
视图的想法是让它具有更多的HTML外观,以便前端开发人员或不了解PHP的人可以轻松地使用该文件而不会感到困惑.
更新
要了解有关MVC的更多信息,您可以看到其中的任何一个(那里有大量的教程):
http://blog.iandavis.com/2008/12/09/what-are-the-benefits-of-mvc/
http://php-html.net/tutorials/model-view-controller-in-php/
http://www.tonymarston.net/php-mysql/model-view-controller.html
要查看使用MVC的PHP的具体示例,我建议下载一些更优秀的框架(例如CodeIgniter,Symfony或Drupal)并查看代码.尝试弄清楚它是如何工作的,然后为简单的基于文章的系统重新创建功能.
| 归档时间: |
|
| 查看次数: |
23646 次 |
| 最近记录: |