【问题标题】:FOSUserBundle: what is the point? [closed]FOSUserBundle:有什么意义? [关闭]
【发布时间】:2013-09-28 07:53:15
【问题描述】:

我见过很多人尝试使用 FOSUserBundle。

我已经为此苦苦挣扎了 6 个小时。只是为了能够制作自定义用户注册表单。 基本文档长达 6 页:basic。 从我的角度来看,以下是使用 FOSUserBundle 的所有缺点:

  • 您必须复制粘贴他们的视图才能实现继承
  • 他们在数据库中有自己的自己的表:fos_user。因此,您必须将所有代码基于您的user 实体,它是BaseUser 的子实体。如果您的数据库遵循约定(就像 wordpress 一样,所有表都以 wp_ 开头),这会破坏您的约定。
  • 您必须使用诸如“如果 fos_user_content 块为空,我想没有什么可显示的内容,否则我必须重新组织我的整个视图以显示 fos_user_content 块(注册、修改用户配置文件和等等)”
  • 现在我发现如果您需要两种不同的注册表单(例如,一种用于客户,一种用于合作伙伴),除非您破解,否则这是不可能的。见here

所以我只是想知道:使用 FOSUserBundle 有什么意义? 如果我已经按照 Symfony 帮助(表单、表单验证和会话)中解释的非常基本的事情完成了注册过程,并且我只是复制粘贴我的代码,从我的角度来看,这比安装要快得多, FOSUserBundle 的配置、继承、修改等。

知道我做了什么,FOSUserBundle有什么优势?什么可以让我做出改变并花更多时间让它与我的项目一起工作,而不是从另一个项目中重复使用我的(表单、表单验证和会话)?

【问题讨论】:

  • 使用 FOSUserBundle 应该更快地实现您需要的所有功能。如果您可以通过其他方式更快更好地做到这一点,请不要使用它。
  • 我一直在用头撞墙以使其与 PUGXMultiUserBundle 一起工作,因为这个应该可以帮助我拥有多个用户。我已经设法设置了所有内容,现在,天哪,在设法显示两种不同的注册表单后,当我使用一个或另一个注册表单发布时,我遇到了一个完全无法理解的错误:据我所知,学说试图做出一个不使用表“t0”加入:
  • (以下)An exception occurred while executing 'SELECT t1.username AS username2, t1.username_canonical AS username_canonical3, t1.email AS email4, t1.email_canonical AS email_canonical5, t1.enabled AS enabled6, t1.salt AS salt7, t1.password AS password8,[...snap...] FROM person_teacher t1 WHERE t0.username_canonical = ?' with params ["sqdfsdf.dfqs@gmil.com"]: SQLSTATE[42S22]: Column not found: 1054 Unknown column 't0.username_canonical' in 'where clause'.
  • ...当然,绝对ZERO在网络上提供此类错误的线索或帮助。我开始厌倦了symfony。我几乎把所有时间都花在解决配置问题上,而不是技术问题或其他任何问题上。
  • FOSUserBundle 很难用,它不是 Ruby On Rails 中的Devise

标签: symfony fosuserbundle


【解决方案1】:

嗯,你的问题听起来更像是在咆哮,但你得到了一些分数。

在我看来,FOSUserBundle 以及社区中的许多 Bundle 的主要问题是他们试图使其可定制、通用、可重用等等。

目标是公平的,但实际上它往往会导致对人类不友好代码。大多数情况下,使用社区捆绑包“完成”所需的时间比制作自己的捆绑包要多得多(请参阅奏鸣曲捆绑包)。

我并不是说它们是不好的捆绑包,一点也不,但它们值得不同的目的

对我来说,这样的捆绑包可以帮助新手快速实现,完成工作,对于快速应用程序开发,这可能真的很容易获得一个完整的应用程序并完成所有注册过程。

但大多数时候,您会意识到使用第三方代码将您过多地与他们自己的概念联系在一起,这是错误的。

相比之下,我非常喜欢 npm 社区,有很多带有一个功能的小包,您可以轻松集成它们,同样,我尝试支持库当我想发布一个开源项目时捆绑。关键是框架实现没有任何概念或理念,并且很容易集成到现有项目中。

我记得早期我不得不使用 Joomla、Drupal、Wordpress 等等,这是“插件/扩展/模块”的方式,就像我们经常听到的“有一个捆绑包”一样,有些人或公司只是想完成它,无论质量如何,应用程序的未来如何,因为它已经售出。

总而言之,这样的包可以极大地帮助和加快开发过程,但要小心,如果您有自定义要求、性能影响等,请不要使用它们,但如果您只想快速验证概念,还是一个简单的应用,都值得。

这是一个虚构的故事,基于我自己的经验和使用它的失败:)

【讨论】:

  • 我同意你的观点:如果你不想完全按照它的方式使用它,那么修改它比开发你的自己的。仅供参考,因为 Symfony 以及它声称非常有用的东西,我已经损失了很多钱。如果我从头开始做,我会赚钱的。但是我已经浪费了几天和几天的时间来寻找如何使用这个捆绑包,如何破解这个捆绑包,以及最糟糕的:如何使用教义,我总是会解释为什么每次避免它我的一个学生会问它是什么。
  • +1 对捆绑包和插件的总体总结非常好,我经常发现从长远来看,编写自己的东西更容易,而不是不得不破解别人写的东西,不管它的文档/代码有多好。 Bundles 可以让你快速开始一个项目并节省大量时间,尤其是对于新用户,我觉得对于新人来说,它会阻止他们学习,因为他们并没有真正理解“它是如何工作的”
  • “如何使用学说,我总是会解释为什么每次我的一个学生问它是什么时都要避免它”......听起来确实有事实和论据支持。显然不是......无论如何,你不需要破解它们来正确使用它们,如果你不这样做,这只是一个陡峭的学习曲线(+匹配用例以及它在社区中的使用范围)的问题有适当的知识。我在这一点上是对的:你不喜欢吗?然后不要使用它。但是对学生说这样的 BS 是完全错误的。
  • @B2F 这不是 BS,尤其是如果他们是学生的话。如果他们从学说 2 之类的东西开始,他们会知道用 PDO 编写 SQL 语句是多么简单吗?或者他们会认为他们需要像学说 2 这样复杂的东西(并使用仅适用于学说 2 的 DQL)?大多数网站只需要一个路由器和一个模板系统。如果您了解设计模式,您可以构建一些东西来处理您的数据库(DataMapper、Repository),您可以创建一些实用程序类。
  • 不要误会我的意思,我完全同意 Boris Guéry 的回答,他写的一切。但 Olivier Pons 的评论听起来不太对 。首先,如果他输了钱,那不是因为 Symfony,而是显然 是如何使用它的。赚钱与你如何销售你的时间/工艺/产品有关。如果你有适当的背景,教义并不难使用。它的灵感来自 Java 世界中的 Hibernate,它是一种广泛使用的模式,称为 ORM。现在,如果您想争辩它不好,那没关系,但请提出一些论据:yegor256.com/2014/12/01/orm-offensive-anti-pattern.html.
【解决方案2】:

我知道这是一篇旧帖子,但随着搜索引擎不断索引这个...

FYI FOSUserBundle 已经停产,在 Symfony 4 和 5 中没有用...

来源

  1. No Longer Maintained Message On Documentation #2874
  2. Is this project maintained? #2996
  3. Comment with alternatives by Caedendi on 10 Jan 2020

【讨论】:

  • 我喜欢你第一个链接中的评论:“这个包并不是真正需要的(它试图成为 Symfony 中用户管理的一体化解决方案,但它在你可以很容易地自己写)”。供您参考,我在 5 年前放弃了 Php,部分原因是 Symfony,我已经成为 Django 专家,从那时起我的生活在各个方面都变得更好:更高的薪水,更简洁的代码(感谢 @987654324 @),非常友好的团队协作,嗯:总而言之,只浪费了 Symfony 的时间,0/20 的好处。甚至没有 1/20。
猜你喜欢
  • 1970-01-01
  • 2014-05-17
  • 2012-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多