我有一个简单的登录表单的以下数据流。
用户访问 Controller PHP文件。 Controller包括model.php和view.php
用户提交表单, Controller 将 POST 数据发送到模型方法,并返回结果。
用户已登录,并由 Controller 转发到不同的 View (登录成功消息)。
目前我的 View 是静态 HTML(没有 PHP),所以这是我的问题。然后向用户传递欢迎消息(例如“你好,克雷格!”)的正确方法是什么?
View 是否允许 PHP 片段,例如
<?php echo $username; ?>
因为模型在 Controller 文件中先于它加载?
谢谢!
编辑: 允许 View 访问特定的类方法是否更好,例如
<?php $user->getUsername(); ?>
而不仅仅是变量?
根据其他答案,我找到了一篇很有用的文章,您可能也会感兴趣。
http://www.nathandavison.com/posts/view/7/custom-php-mvc-tutorial-part-5-views
最佳答案
以下是您必须考虑的几件事:
如上所述,MVC 和受 MVC 启发的模式中的 View 负责表示逻辑。这包括显示错误消息和分页等内容。为此,每个 View 可以处理多个模板。
View 从模型层接收信息,并据此采取行动。来自模型层的信息如何在 View 中结束的方式是 MVC-ish 模式中最显着的差异之一:
经典 MVC 模式
当模型状态发生变化时,模型层的结构将信息发送给 View 。这是通过 observer pattern 完成的.
Model2 MVC 和HMVC 模式
View 可以直接访问模型层,并能够从中请求信息。这是最接近原始模式的。
MVVM 和MVP 模式
View 通过 Controller 接收信息, Controller 又从模型层请求它。模式的进一步差异源于在将数据传递给 View 之前如何处理数据。
你现在看起来拥有的其实只是一个模板。与 this article 中描述的类似.您最终得到一个结构,该结构没有地方包含表示逻辑。从长远来看,这将导致呈现逻辑被推送到 Controller 中。
要显示欢迎消息,您的 View 应该从模型层请求当前用户的名称。如果模型层返回某种错误状态, View 会选择错误消息模板并插入到布局中。
如果从模型层中检索到用户名称没有问题, View 会选择包含问候语的模板,在模板中设置值并呈现它。
The idea, that controller should initialize model and view, comes from very primitive interpretation of MVC for web. Pattern know as page controller, which tried to graft MVC directly on static web pages.
在我看来,顺序应该是这样的:
模型
您初始化结构,通过它您将处理模型层。它很可能是某种服务工厂,它可以让您构建诸如用于登录的 Authentication 服务和用于处理文档的 Library 服务之类的东西。像这样的东西。我写的有点长comment on model layer's structure更早。您可能会发现它很有用。
查看
您根据从路由机制收集的信息创建 View 实例。如果您正在实现 Model2 或 HMVC,那么您的 View 将需要在构造函数中有一个 Service Factory 的实例。
如果您正在实现 MVVM 或 MVP,则 View 的构造函数没有特殊要求。
控制者
这是您创建的最后一个结构,因为 Controller 负责向 View 和模型层发送命令,然后更改然后更改两者的状态。因此, Controller 应该期望在构造函数中同时接收 View 和服务工厂。
初始化 MVC 的基本元素后,调用 Controller 上的方法,并呈现当前 View 。
请记住,这是非常简化的描述。
关于php - 基本 MVC (PHP) 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11689155/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
您将如何构建一个简单的Sinatra应用程序?我正在制作,我希望该应用具有以下功能:“应用程序”更像是一个包含所有信息的管理仪表板。然后另一个应用程序将通过REST访问信息。我还没有创建仪表板,只是从数据库中获取东西session和身份验证(尚未实现)您可以上传图片,其他应用可以显示这些图片我已经使用RSpec创建了一个测试文件通过Prawn生成报告目前的设置是这样的:app.rbtest_app.rb因为我实际上只有应用程序和测试文件。到目前为止,我已经将Datamapper用于ORM,将SQLite用于数据库。这是我的第一个Ruby/Sinatra项目,所以欢迎任何和所有建议-我应
Rails相对较新。我正在尝试调用一个API,它应该向我返回一个唯一的URL。我的应用程序中捆绑了HTTParty。我已经创建了一个UniqueNumberController,并且我已经阅读了几个HTTParty指南,直到我想要什么,但也许我只是有点迷路,真的不知道该怎么做。基本上,我需要做的就是调用API,获取它返回的URL,然后将该URL插入到用户的数据库中。谁能给我指出正确的方向或与我分享一些代码? 最佳答案 假设API为JSON格式并返回如下数据:{"url":"http://example.com/unique-url"
我想编写一个ruby脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"
我正在尝试复制此GETcurl请求:curl-D--XGET-H"Authorization:BasicdGVzdEB0YXByZXNlYXJjaC5jb206NGMzMTg2Mjg4YWUyM2ZkOTY2MWNiNWRmY2NlMTkzMGU="-H"Content-Type:application/json"http://staging.example.com/api/v1/campaigns在Ruby中,通过电子邮件+apikey生成身份验证:auth="Basic"+Base64::encode64("test@example.com:4c3186288ae23fd9661c
我想开始使用“Sinatra”框架进行编码,但我找不到该框架的“MVC”模式。是“MVC-Sinatra”模式或框架吗? 最佳答案 您可能想查看Padrino这是一个围绕Sinatra构建的框架,可为您的项目提供更“类似Rails”的感觉,但没有那么多隐藏的魔法。这是使用Sinatra可以做什么的一个很好的例子。虽然如果您需要开始使用这很好,但我个人建议您将它用作学习工具,以对您来说最有意义的方式使用Sinatra构建您自己的应用程序。写一些测试/期望,写一些代码,通过测试-重复:)至于ORM,你还应该结帐Sequel其中(imho
对于我正在编写的Rails3应用程序,我正在考虑从本地文件系统上的XML、YAML或JSON文件中读取一些配置数据。重点是:我应该把这些文件放在哪里?Rails应用程序中是否有用于存储此类内容的默认位置?附带说明一下,我的应用程序部署在Heroku上。 最佳答案 我经常做的是:如果文件是通用配置文件:我在目录/config中创建一个YAML文件,每个环境有一个上层key如果我为每个环境(大项目)创建一个文件:我为每个环境创建一个YAML并将它们存储在/config/environments/然后我在加载YAML的地方创建了一个初始化