Symfony2中的模型和其他MVC框架?

otp*_*ran 11 php oop model-view-controller model symfony

我试图了解模型如何在适当的MVC中工作.

据我所知,MVC中的模型是应用程序逻辑发生的地方,模型是肉食,或MVC的骨干.视图只是表示,控制器是"粘合剂",它要求模型执行某些操作,返回一些数据,并将该信息传递给呈现给用户的视图.

现在,我正在探索各种不同的MVC框架,并想了解如何在MVC中使用模型.就模型而言,Symfony 2是一个有趣的框架,因为没有模型:)

我在掌握Symfony2的一些功能时遇到了问题,而Model在Symfony2 MVC中的适用范围.

根据定义,模型是域逻辑和数据库操作的所在.

所以我的问题是:

  1. 在Symfony2中我们有实体和服务,是Symfony中的那两个模型吗?
  2. Symfony2服务和Web服务有什么区别?

所以我的问题是Symfony2中的模型在哪里?由于Model是一个由Domain Objects和Data Mappers组成的层,我可以假设Entities是Domain Objects,而Doctrine是Data Mapper,这是正确的吗?

Symfony2服务在哪里适用?

Hyu*_*Kim 11

  1. 与其他框架一样,Symfony2没有MVC的传统"模型"部分.甚至来自ORM/ODM Doctrine的实体/文档也不是框架本身的一部分,Symfony2也不依赖它.

    正如Fabien(Symfony框架的创建者)在他的博客上写道,

    "你可以手动创建你的模型或使用任何其他工具,比如ORM"......"我不喜欢MVC,因为这不是网络的运作方式.Symfony2是一个HTTP框架;它是一个Request /响应框架."

    我很难理解阅读,但是当我真正开始在Symfony2中编程时,我理解了他的意思.

    另一方面,Symfony2中的服务只是执行全局任务的对象.路由器,学说,记录器,邮件程序是预装Symfony2的众多服务中的一部分.您可以从代码的任何部分访问服务.

  2. Symfony2服务与Web服务完全不同.Symfony2服务旨在用于您的系统,而Web服务旨在通过REST api从一台机器到另一台机器使用.虽然,我想你可以创建RESTful api作为服务的一部分.


小智 5

“我不喜欢 MVC,因为这不是网络的工作方式。Symfony2 是一个 HTTP 框架;它是一个请求/响应框架。”

我完全不同意这种说法。如果您以正确的方式看待它,MVC 绝对适合 Web。

1)HTTP请求被Controller接收。

2)控制器实例化模型(或模型)并激活模型上的相关方法,每个方法返回一个结果,通常是一个数据数组。

3) 当模型完成后,控制器实例化视图,从模型插入数据,然后激活将数据转换为 HTML 的方法。

4) 控制器从视图中获取结果并将其作为 HTTP 响应发送回客户端。

仅仅因为 MVC 是在 Web 出现之前几年就为桌面应用程序发明的,因此与 Web 无关,这是那些看不到树木的树木,如果不关注不相关的细节就看不到大局的人所犯的错误。MVC 中的每个组件都有一组不同的职责,并且假设您创建了三个组件,每个组件都履行这些职责中的一个 - 在物理实现无关紧要的情况下 - 那么无论您喜欢与否,您都拥有 MVC。


小智 -1

我不知道 Symfony,但我已经使用其他 MVC 框架(grails、codeigniter)。

模型(实体)代表数据,可以直接在模型中定义一些稍后用于验证的限制。例如,您可以为每个属性定义(如果需要)其长度、模式……

服务可能更依赖 symfony。与 Grails 相比,服务是放置业务代码的组件。在 Java EE 中,它是 Bean。请注意,服务可以成为 Web 服务,但这不是强制性的。控制器也可以调用服务,以便在渲染视图之前进行一些计算。

希望我的回答能够有所帮助。