代码之家  ›  专栏  ›  技术社区  ›  diego

symfony vs cakephp[结束]

  •  54
  • diego  · 技术社区  · 15 年前

    symfony和cakephp在概念上有什么区别?

    9 回复  |  直到 13 年前
        1
  •  68
  •   stereoscott    12 年前

    为了平衡这一点,这就是我喜欢symfony的原因:

    • 使用PHP5
    • 它运行一些非常大的站点,比如 雅虎!答案,美味,日常运动 .
    • 好的文件。网站上的就业指导非常棒。引导您直接浏览所有功能,完成后您会觉得可以构建任何东西。
    • is highly modular ;许多symfony组件都是独立工作的。
    • 允许您选择 任何一个 推进 作为你的目标。教义真的很好用。
    • 您可以使用YAML或PHP定义模型,这取决于您自己。有些人不喜欢配置文件,如果你想避开YAML,你可以限制他们的使用。
    • 更新的symfony cli(从1.2开始)非常棒。我同意abales的观点,在这个版本之前它有点古怪,但是现在它已经被很好地记录下来了,并且遵循了一种可预测的格式。
    • 有很多,我的意思是很多,与Ruby on Rails相似,当然PHP不像露比那样漂亮或灵活(!)但是,如果你和蛋糕开发人员交谈,他们可能会说相反的话:)
    • 这个 symfony管理生成器 这是从CRUD(也存在于SimfOne)中的一步,是一个巨大的节省时间的方法。使用您的数据模型,它将生成 可定制的 管理界面包括列表视图(索引)、创建和编辑页面。它不像basic crud那样生成源代码,然后你进去修改它。。。实际上,您可以定义每个字段的外观、要包含哪些字段、可以对每个对象执行哪些附加操作等等。

    在概念上,我认为区别在于:

    • CakePHP的学习曲线较小。如果您从未使用过MVC框架,那么Cake将更容易在短时间内使用和运行。
    • Symfony感觉有点“大”,不是说它很慢,而是有很多代码可以让你在需要的时候做很多非常高级的事情。

    我能给出的最好的建议是,快速尝试在这两者中建立一个您自己的简单数据模型,并使用一些基本接口进行实验,看看哪个最适合您自己的编码风格。我认为这两个框架都有非常活跃和热情的用户社区,你不会后悔你的决定。

        2
  •  27
  •   Teej    12 年前
    • CakePHP的原理与Ruby on Rails类似。
    • CakePHP更适合中型项目。
    • CakePHP学习起来更快。
    • CakePHP比symfony轻。
    • CakePHP的数据库交互使用CRUD。
    • CakePHP使用测试系统PHPUnit。
    • 对CakePHP烘焙和脚手架很感兴趣。

    • Symfony的哲学是每个版本都不同。
    • Symfony学起来比较慢。
    • Symfony最适合大型项目。
    • Symfony的数据库交互使用docine。
    • Symfony使用测试系统PHPUnit。
    • 对Symfony的包和模板很感兴趣。
        3
  •  22
  •   Community CDub    8 年前

    一个很大的区别在于模型是如何创建的:CakePHP模型是用PHP编写的,Symphony模型是用YAML编写的,由Propel提供动力。CakePHP的方法更类似于ROR的ActiveRecord(尽管它并不完全是AR实现)。一般来说,CakePHP更像rails。

    在我看来,CakePHP的文档和工具有更广泛的目标读者群,语法和帮助程序也更容易,但是你还没有接受PHP5作为他们的唯一目标(自动加载实际上并不存在)。一般来说,我更喜欢CakePHP的方法,因为它遵循的是一种既定的标准,我对它的组织表示赞赏。我也推荐 Kohana 因为它是PHP5的好东西。

    another post 关于这个问题的堆栈溢出,尽管焦点有点不同。


    编辑:我对Symfony进行了审校,以找出我说“不”的原因,并提出了这些你的意见和里程可能会有所不同:

    CakePHP还提供了非常简单的脚手架和易于理解的CLI工具。Symphony的CLI语法对我来说有点奇怪,Symfony中的CRUD不一样。再加上Symfony(awkard)的动作语法,再加上Symfony设计拙劣(难以理解)的网站,以及对第三方付费文档(亚马逊上的书籍)的偏好,你在cons栏有更多的勾号。

        4
  •  14
  •   Tom    15 年前

    关于CakePHP和上述限制的一些说法根本不是真的。查询是可能的。你只要知道怎么做就行了。CakePHP的“automagic”非常好,因此您可以快速地启动。到目前为止,它是开发速度最快的框架(因此,为什么它如此紧密地模仿RoR,这显然是一个巨大的成功和轰动)。有更高级的行为来获取不同返回的数据,并通过指定一些简短的方法调用和数组参数进行一些更复杂的查询。

    然而。据我所知,没有其他框架有这么多的“automagic”方法和类。Cake承担了最常见的任务,并提供了一种简单的方法来完成它。如果你真的很聪明,你将在模型级别完成大部分代码,并利用app-model和app-controller文件,拥有一个非常高效的应用程序。

    控制台很棒,而且总是在扩展。这个社区真的很棒,有很多贡献可以帮助你更快地完成任务。你可以直接进行架构,然后将“部分”移动到适当的位置,以非常快速地构建一个应用程序,因为你需要的大部分都是可用的。你不能用任何其他的框架。通常你得花更多的时间来编码。

    最后。虽然文档落后,但现在好多了,尽管在缺少文档和1.1版期间,Cake也得到了一些苛刻的审查……它仍然很好,只是被严重忽略了。有了1.2,现在Cake2和Cake3就在地平线上……你会看到很多观点在改变。

    我从1.1开始使用CakePHP。我坚信这一点。我把它用在大型企业网站上。每天都会收到数以百万计的点击…我们不在像WordPress和Drupal这样的解决方案领域。当你达到CMS类型网站的水平时,我非常高兴有CakePHP在上面。同样,Symfony和CodeIgniter将帮助您进行缩放。我也不能说这两个框架有什么坏处。我只能说,你将花更少的时间编写代码,找到一个更大的社区(和一个超级友好的IRC频道)与CakePHP。

        5
  •  12
  •   Jose Diaz-Gonzalez    15 年前

    我正在检查并记录我对上述关于CakePHP的评论的一些回应,以及一些(在某些情况下是正确的)感知到的错误。

    大型网站使用CakePHP运行,有些是Mozilla插件、MIT Scratch和热脚本。在CakePHP网站的底部有一个更大的列表( http://cakephp.org ). 不管怎样,只要框架不是完全愚蠢的(CakePHP不是太愚蠢:D),任何优秀的开发人员都应该能够使用框架构建可伸缩的网站。

    诚然,没有一个很好的(免费的)CakePHP教程介绍框架的所有特性,但是文档的布局非常好,而且非常冗长。任何不清楚的地方都可以通过Google组和IRC进行清理,我们欢迎对文档的任何和所有更改/更正。文档不仅仅是一个核心的开发人员问题,因为许多事情都是特定于应用程序的,人们会想出有趣的技巧和窍门,因此每个人都被邀请参与(不仅仅是评论!)。当然,这都是温和的,所以大部分的cruft/spam没有添加。

    代码是模块化的,您可以添加新的代码来取代核心功能。大部分代码都是简单的PHP类。确实,编写这样的功能可能是一个负担,而且我没有尝试使用替代类作为填充。是的,它不处理其他ORMs,所以您只能使用默认值,但这应该在Cake3中修复,Cake3可以随意混合和匹配任何其他PHP类(包括推进和条令支持)。

    CLI非常好,而且很容易扩展以获得特定于应用程序的支持。一个例子是,我最近开发了一个shell插件,可以自动安装我从github索引的任何其他CakePHP插件。花了大约5个小时来建造一些非常有用和灵活的东西。我确信这种功能存在于Syffand,它确实存在于RoR中:

    至于像Rails一样,是的,不是的,很多事情都是相似的,毕竟它们是MVC框架,CakePHP采用的是“约定vs配置”的方法。PHP4支持更好的语法,Symfony无疑因为PHP5的支持而拥有更好的语法,但是它仍然非常有用和直观。框架并没有提供Rails的所有功能,因为它不是一个直接的克隆。CakePHP是一个框架,而不是一个库(hi-Zend),因此它不会提供所有现成的东西。

    我同意,生成视图在CakePHP中有点不稳定。它在CakePHP 1.3和2.0中得到了极大的增强。它将支持每个模型、视图和控制器的自定义模板(而不是现在的视图类型)。此外,在GITHUB上存在一组shell任务,用户通过NeLurokes来自动烘焙特定类型的视图(包括仅管理视图),这些视图可以与自定义模板组合使用,以生成您想要的确切内容。CSS样式也有帮助:)但这绝对是可以改进的。

    CakePHP的Model::find方法中有许多不同的参数,尽管在某些情况下使用原始SQL查询可能会很有用。模型::FIN()方法非常灵活,在创建复杂的查找时,我没有失败。我认为这与熟悉ORM有关,ORM总是不可避免地需要时间。

    表单验证在逻辑上应该在模型层,因为这是执行与数据库相关的任何操作的地方。您可以在我相信的特定视图中指定备用验证,或者交换验证(这是有行为的,但是没有它就不难做到)。

    多维数组有点傻,但仍然可能有多维对象。PHP4有一个损坏的对象模型,所以这就是CakePHP不使用对象的原因。这在CakePHP的未来版本中得到了纠正(正如我在前面的评论中指出的那样),但是在某些情况下,有一个支持PHP4的框架是有用的。再次重申,YMMV和我都同意,完整的PHP5将是一个巨大的恩惠,无论是在应用和发展的速度。

    数据库可以随意交换。CakePHP不允许只在一种类型的DB中固有的功能(因此放弃了对仅在MySQL中的枚举的支持),因此ORM总是受支持的,并且总是可以构建有效的查询。您可以在一个应用程序中有多个数据库,如果需要,每个模型一个,并且可以随意交换它们,甚至完全不使用特定模型的数据库。所以不,它没有绑定到特定的数据库。

    最后,您的选择是您自己的,我衷心建议您查看和阅读文档,查看组、IRC频道、博客和任何论坛,看看哪个框架最适合您的开发风格。读者注意,我是一个CakePHP开发人员,所以我的文章有一些偏见。

        6
  •  9
  •   benlumley    15 年前

    除了现有的答案,如果可能的话,你应该同时尝试这两种方法。我经常使用这两种方法,而且经过一段时间后,我开始更喜欢symfony。

    但我相当确信,这并不是因为其中一个更好,而是因为symfony恰好适合我的思维方式,它更接近于我在框架外编写软件时的工作方式,所以感觉更直观。我希望其他人会发现他们的思想符合另一个框架的范例。

    尽管如此,我确实认为cakephp的对象是一个弱点,因为它使用数组而不是对象。(每当我需要做一些让我很难做到的事情时,这会在我内心周期性地发展成强烈的仇恨。。。)它们可以做完全一样的事情,但是返回对象而不是数组来表示数据,我认为大部分的问题都会消失——你可以将额外的功能添加到数据对象中,以实现我想做的事情,而不是在现有的模型类中编写函数并传递数组。

        7
  •  6
  •   xorxor    15 年前

    CakePHP的模型层一团糟。尝试执行一些简单的操作,例如在类别和项对象之间建立多对多关系,然后检索类别中具有特定属性集的所有项。

    比如:

    SELECT items.* FROM items, categories, item_categories WHERE item.available=1 AND category.id=1 AND item_categories.category_id = category.id
    

    用模型的find()方法在cake中的一个语句中不可能有如此琐碎的事情。

    在核心API中也没有办法像在上面的item_category表中的一个item中那样添加一个多对多关系。网上有几个解决方案,包括有人在面包店发布的行为( http://bakery.cakephp.org/articles/view/add-delete-habtm-behavior ),但这正是任何一个好的ORM框架(如Propel、Torque(Java)、Hibernate(Java)、SQLObject(Python)、SQLAlchemy(Python)都支持的东西。基本上,您要么必须编写大量的PHP代码来添加那些缺少的特性,要么使用原始SQL查询,但是框架的主要目的是避免做这些事情,以便您可以专注于正在编写的应用程序,这样您就不会真正从CakePHP中获得太多好处。

    还有很多其他问题,它们都与模型层有关,包括表单验证绑定到模型层,必须处理杂乱的多维数组,必须使用原始sql,并将应用程序绑定到特定的数据库。

    我想说使用symfony。这是一个更大的框架可能需要几天的时间来学习,但它将是非常值得的。我本来打算用CakePHP来做一个我正在做的项目,在遇到了太多这样的问题之后,我转向了symfony,一切都很顺利。

        8
  •  6
  •   Mr.Lee    14 年前

    还有一个区别是:Symfony分为3个环境:开发、生产和测试-CakePHP不能! 很容易同时开发和测试产品

        9
  •  4
  •   Simon E. pbs    13 年前

    Cake2.0很好地自动加载了您需要的大多数类,而我在Symfony 2中发现,每个类都必须在脚本顶部有许多导入。试图记住所有这些输入是 几乎不可能 ,所以你总是需要一个方便的参考资料。

    如。 Symfony 2控制器代码。。。

    namespace Acme\HelloBundle\Controller;
    use Symfony\Component\HttpFoundation\Response;
    // bunch of other imports accumulate here...
    
    class HelloController {
        ...
    

    啊,恶心。虽然这对纯粹主义者来说可能是一种很好的面向对象技术,但它延长了开发时间(再见RAD)。至少有了Cake,我现在可以从内存中快速编写大多数简单的东西。