symfony vs cakephp
symfony和cakephp在概念上有什么区别?
只是为了平衡这个线程,这就是为什么我喜欢symfony:
- 使用PHP5
- 它运行一些真正的大网站,如雅虎! 答案,美味,每日动议 。
- 良好的文档。 网站上的jobeet教程非常棒。 直接通过所有的function,完成后,你觉得你可以build立任何东西。
- 是高度模块化的 ; 许多symfony组件都是独立运行的。
- 允许您selectPropel 或 Doctrine作为您的ORM。 学说真的很棒,易于使用。
- 你可以用YAML或者PHP来定义你的模型,它取决于你。 有些人不喜欢configuration文件,如果你想避开YAML,你真的可以限制他们的使用。
- 更新的symfony cli(截至1.2)非常棒。 我同意这个版本,在这个版本之前,它有点不可思议,但是现在它已经被很好地logging下来,并且遵循一个可预测的格式。
- 有很多,我的意思是很多,在轨道上的ruby的相似之处,除了当然PHP不如Ruby(!)漂亮或灵活。 但是,如果你和一个蛋糕开发者交谈,他们可能会说相反的话:)
- symfonypipe理生成器 ,这是从CRUD(也存在于symfony中)的一个步骤,是一个巨大的节省时间。 使用您的数据模型,它将生成可自定义的pipe理界面,包括列表视图(索引),创build和编辑页面。 它不像基本的东西,它生成的源代码,你去和修改它…你实际上可以定义每个领域的外观,你想包括哪些领域,你可以在每个对象上执行什么额外的行动,等等。
从概念上讲,我会说不同的是:
- CakePHP有一个较小的学习曲线。 如果你从来没有使用过MVC框架,Cake将会在更短的时间内轻松地完成并运行。
- Symfony觉得有点“大”,并不是说速度很慢,但是有很多代码可以让你在需要的时候做很多高级的事情。
我可以给出的最好的build议是快速尝试build立一个你自己的简单的数据模型,并尝试一些基本的接口,只看最适合自己的编码风格。 我认为这两个框架都有非常积极和激情的用户群体,您不会以任何方式后悔您的决定。
- CakePHP的理念与Ruby on Rails相似。
- CakePHP对于中型项目更好。
- CakePHP学习速度更快。
- CakePHP比symfony轻。
- CakePHP的数据库交互使用CRUD。
- CakePHP使用testing系统PHPUnit。
- CakePHP烘烤和脚手架是有趣的。
- Symfony的哲学是每个版本都不同。
- Symfony的学习速度较慢。
- Symfony最适合大型项目。
- Symfony的数据库交互使用Doctrine。
- Symfony使用testing系统PHPUnit。
- 在Symfony的Bundles和模板中很有趣。
一个很大的区别在于如何创build模型:CakePHP模型是用PHP编写的,而Symphony模型是用YAML编写的,并由Propel提供支持。 CakePHP的方法更类似于ROR的ActiveRecord(尽pipe它不完全是一个AR实现)。 总的来说,CakePHP更具有轨道式的function。
CakePHP的文档和工具,在我看来,有更广泛的目标受众,语法和帮助者更容易,但你还没有把PHP5作为他们的唯一目标(自动加载不是真的在那里)。 总的来说,我更喜欢CakePHP的方法,因为它遵循一个既定的标准,我称赞它是组织。 我也推荐Kohana的PHP5的善良。
关于这个问题,还有一个关于堆栈溢出的post ,虽然它的焦点有点不同。
编辑:我重新考虑Symfonyfind我说'不'的原因,并提出这些 – 你的意见和里程可能会有所不同:
CakePHP还提供了简单的脚手架和易于理解的CLI工具。 Symphony的CLI语法对我来说有些不可思议,Symfony中的“CRUD”并不相同。 将Symfony的(awkard)动作语法与Symfony的devise不佳(并且难以理解的)网站放在一起,并且偏好第三方付费文档(亚马逊书籍),并且在cons列中有更多的记号。
有关CakePHP和上述限制的一些说法是不正确的。 查询是可能的。 你只需要知道如何做到这一点。 CakePHP的“automagic”是超级好的,所以你可以在FAST上运行。 它是最快的发展框架(因此,为什么它在RoR之后如此紧密地build模,这显然是一个巨大的成功和嗡嗡声)。 还有更高级的行为来获得不同的数据返回,并使用一些简短的方法调用和数组参数来指定一些更复杂的查询。
然而。 据我所知,没有其他的框架有这么多的“自动化”的方法和类。 蛋糕是最常见的任务,并提供一个简单的方法来完成它。 如果你真的很聪明,你将在模型级别完成大部分的编码,并使用app_model和app_controller文件,并且拥有一个非常高效的应用程序。
控制台是伟大的,并不断扩大。 这个社区真的很棒,而且有很多的贡献可以帮助你更快地把事情推上去。 你可以从字面上build筑师,然后移动“块”到位,非常快地build立一个应用程序,因为你需要的大部分是可用的。 你没有得到任何其他框架。 你通常需要花更多的时间进行编码。
最后。 虽然文档比较落后,但是现在好多了,而Cake在缺乏文档和版本1.1的时候也得到了一些苛刻的评价……这仍然很好,只是被严重忽视了。 随着1.2和现在Cake2和Cake3在地平线上…你会看到很多意见改变。
我从1.1开始使用CakePHP。 我坚信这一点。 我曾经使用它的巨大企业网站。 每天收到数百万次点击…我们已经脱离了WordPress和Drupal等解决scheme的领域。 当你达到一个CMStypes的网站的水平,我非常高兴有CakePHP的。 同样,Symfony和CodeIgniter将帮助您进行缩放。 我也不能说任何一个框架有什么不好的地方。 我只能说,你将花更less的时间编码,并find一个更大的社区(和超级友好的IRC频道)与CakePHP。
我正在通过并logging一些关于CakePHP的上述评论以及其中一些(在某些情况下是正确的)错误的回应。
大网站运行使用CakePHP,一些是Mozilla插件,麻省理工学院划痕,热脚本。 CakePHP网站( http://cakephp.org )底部有一个更大的列表。 无论如何,只要框架不是完全愚蠢的(CakePHP不是太愚蠢:D),任何优秀的开发人员都应该能够使用框架构build可伸缩的网站。
确实没有一个非常好的(免费的)CakePHP教程可以通过框架的每个function,但是文档布局非常好,而且非常详细。 任何不清楚的内容都可以通过Google小组和IRC清除,我们欢迎对文档进行任何和所有更改/更正。 文档不仅仅是一个核心的开发者问题,因为很多事情都是针对特定应用的,人们会提出有趣的提示和技巧,所以每个人都被邀请来贡献(不仅仅是评论!)。 当然,它是所有主持人,所以大部分的cruft /垃圾邮件不增加。
代码是模块化的,您可以添加代替核心function的新代码。 很多代码只是PHP类。 确实,编写这样的function可能是一个负担,我没有尝试使用替代类作为fillins。 是的,它不处理其他ORM,所以你坚持使用默认值,但这应该在Cake3中修复,它将随意混合和匹配任何其他PHP类(包括Propel和Doctrine支持)。
CLI非常好,可以很容易地扩展到特定于应用程序的支持。 一个例子是我最近开发了一个shell插件,它可以自动安装我从github编制的任何其他CakePHP插件。 花了大约5个小时build立一个非常有用和灵活的东西。 我敢肯定,这样的function存在Symfony,它存在RoR 🙂
至于Rails-like,事实并非如此。 很多事情是相似的,毕竟他们是MVC框架,而CakePHP则采用“惯例vsconfiguration”的方式。 PHP4支持更好的语法,Symfony无疑具有PHP5支持,但它仍然非常实用和直观。 框架不提供Rails开箱即用function,因为它不是一个直接的克隆。 CakePHP是一个框架,而不是一个库(喜Zend),所以它不会提供所有的东西。
我认为,在CakePHP中,一些观点是有点过分的。 它在CakePHP 1.3和2.0中被大大增强了。 它将支持每个模型,视图和控制器的定制模板(而不仅仅是现在的视图types)。 此外,在github上,一个用户通过neilcrookes存在一组shell任务,它们只会自动烘焙某些types的视图(包括只有pipe理视图),这些视图可以与自定义模板结合使用,以生成您想要的内容。 CSS样式也有助于:)但这绝对是可以改进的东西。
CakePHP在Model :: find方法中使用了许多不同的参数,尽pipe在某些情况下,使用原始SQL查询可能会很有用。 Model :: find()方法非常灵活,并且在创build复杂发现方面没有失败。 我想这与ORM的舒适性有关,这总是需要时间。
表单validation应该在逻辑上位于模型层中,因为这是执行与数据库相关的任何操作的地方。 你可以指定在我认为特定的视图替代validation,或交换validation(有这样的行为,但没有它,这不会很难这样做)。
multidimensional array有点傻,但你仍然可能有多维的对象。 PHP4有一个破坏的对象模型,所以这就是为什么CakePHP不使用对象。 这正在CakePHP的未来版本中得到纠正(正如我在前面的评论中指出的那样),但是在某些情况下有一个支持PHP4的框架是有用的。 YMMV和我同样认为,完整的PHP5在应用和开发速度方面都将是一个巨大的利益。
数据库可以随意换出。 CakePHP不允许只有一种types的数据库所固有的function(因此ENUM只能在MySQL中失去支持),所以ORM总是被支持,并且始终可以构build有效的查询。 您可以在应用程序中使用多个数据库,如果需要,可以在每个模型中使用一个数据库,并且可以根据需要更换它们,甚至不使用特定模型的数据库。 所以不,它没有绑定到特定的数据库。
最后,您的select是您自己的,我衷心build议您仔细阅读文档,查看小组,IRC频道,博客和任何论坛,看看哪种框架最适合您的开发风格。 读者请注意,我是CakePHP的开发者,所以我的post有一些偏见。
除了现有的答案,如果可能的话,你应该尝试两种方法。 我用了很多,一段时间以来,更喜欢symfony。
但是我相信它并不是因为其中一个更好,而是因为symfony恰好适合我的思维方式,所以当我在框架之外编写软件的时候,它更接近我所做的,所以感觉更直观。 我期望其他人可能会发现他们的思想符合另一个框架的范式。
话虽如此,我认为cakephp的对象是一个弱点,通过使用数组而不是对象。 (当我需要做某件事情时,这种东西会周期性地发展成为一种强烈的仇恨,它使得它很难……)它们可以完全相同,但是返回对象而不是数组来表示数据,而且我认为大部分我所遇到的问题将会消失 – 您将能够在数据对象中添加额外的function来实现我想要做的事情,而不是在现有的模型类中编写函数并将它们传递给数组。
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表中添加一个单一的多对多关系。 在网上有几个解决scheme,包括有人在面包店发布的行为,但这只是一个很好的ORM框架,像Propel ,Torque(Java),Hibernate(Java),SQLObject(Python),SQLAlchemy(Python)支持。 基本上你要写很多PHP代码来添加这些缺less的function,或者使用原始的SQL查询,但是框架的主要目的是避免做这些事情,这样你就可以专注于你的应用程序写作,所以你并没有真正获得CakePHP很多。
还有一堆其他的问题,它们都与模型层有关,包括绑定到模型层的表单validation,不得不处理凌乱的multidimensional array,必须使用原始的sql,并将您的应用绑定到特定的数据库。
我会说使用symfony。 这是一个更大的框架,可能需要几天的时间才能学习,但这将是非常值得的。 我打算使用CakePHP进行一个我正在开发的项目,在运行了很多types的问题之后,我切换到了symfony,而且一直在顺风顺水。
一个区别是:Symfony分为3个环境:开发,生产和testing – CakePHP不能! 同时开发和testing产品很容易
Cake 2.0很好地自动加载你需要的大部分类,而我在Symfony 2中发现,每个类都必须在脚本的顶部有许多导入。 试图记住所有这些import是几乎不可能的 ,所以你总是需要一个方便的参考。
例如。 Symfony 2控制器代码…
namespace Acme\HelloBundle\Controller; use Symfony\Component\HttpFoundation\Response; // bunch of other imports accumulate here... class HelloController { ...
啊,你好。 这对于纯粹主义者来说可能是一个很好的面向对象的技术,它延长了开发时间(再见了RAD)。 至less在Cake中,我可以从内存中快速编写大部分简单的东西。