Cakephp和Yii:相似/不同/速度?

时间:2010-11-29 09:32:11

标签: cakephp yii

我是CakePhp程序员。我决定试用Yii框架。我想知道CakePhp与Yii有什么相似之处。另外,Yii比CakePhp快得多吗?

8 个答案:

答案 0 :(得分:41)

从个人经验来看,两个框架都存在一些差异,特别是蛋糕与yii处理模型的方式。

  • 在cakephp中你不能使用复合材料 主键,这是主要的 我的交易破坏者。综合 Yii支持主键。
  • Cakephp 强制执行约定,而yii 赞成约定,您不会被迫遵循某个标准。虽然强制执行约定是建立良好编程实践的好方法,但最终yii提供的灵活性为我赢得了这一轮。
  • 开箱即用的性能,我认为yii具有优势,但与性能调整一样,使用适当的缓存配置,并且只要您小心使用ActiveRecord模式,它们就没那么多了

作为旁注,我在CakePHP和Yii都有领先的Web应用程序实现,我从团队得到的反馈是,经验不足的团队优先考虑CakePHP,而Yii则是更有经验的团队的首选。按照你的意愿做好准备。

答案 1 :(得分:16)

旧帖子,但只是增加了一些经验。

我一直在使用蛋糕一段时间了。准确地说是3年。

目前,Yii绝对是领导PHP的MVC技术的人。它是一个框架,可能没有其他PHP框架可以比较。我个人对“网格”印象非常深刻......我认为PHP方面总是缺少这种方式:)它速度惊人,适合各种开发人员。

对于CakePHP:我已经阅读了许多人声称并且可能依赖于框架的“惯例”“严格性”的博客。

那就是说,我同意并不同意。一旦你掌握它,通常做出的声明似乎很明显。每个可以轻松覆盖引用强制引用的规则。最重要的是,人们没有注意到的是为什么要强制执行惯例?

如果你是一个有很多生产压力的开发人员,我会说在场景后面运行的 auto-magic 蛋糕,比如获取相关的模型数据,保存相关的模型数据,定义基于关系的约定绝对是惊人的。

遵循这些惯例所带来的整洁不能在这里解释,只能经历。

我还阅读了很多博客,其中我看到了对框架速度的抱怨。根据我的经验,我会说,你应该阅读本书。人们定义关系数量,默认情况下,Cake会获取所有相关的模型数据。您可以覆盖此行为,只需获取所需的数据。事实上你的绑定,动态解开你的模型。 Cake也有一个名为“containable”的行为。

一旦你掌握了蛋糕,生产和开发真的是“快速”。

此外,自从CakPHP 2以来,它已经发生了变化,它非常快,甚至更具可扩展性。

所有人都说,我真的相信Cake的文档很差;通过更好的文档,更多真实世界的示例和存储库,它将是一个更强大的竞争者。

答案 2 :(得分:5)

两个框架非常相似,但我喜欢Yii因为速度快,在模型上使用延迟加载,数百个帮助程序(jQuery Widgets),不需要XML / YAML,大量扩展,控制台和Gii代码生成器,管理界面没有魔法(+可定制,+控制),活跃的论坛,完全和美丽的OOP设计,甚至系统......等。

Cakephp也是一个非常好的框架,我喜欢他们正在计划培训课程。

答案 3 :(得分:4)

Cake和Yii之间的差异

  1. Cake有每个控制器的模型,其中Yii每个操作有1个,即控制器独立于Yii中的特定模型
  2. 在Yii中,您必须在每个操作中手动指定视图和模型
  3. 在Yii中,除非手动指定,否则不会提取相关和相关记录
  4. 在Yii中,模型可以是2种类型(即扩展自)活动记录模型或表单模型,基于您是否要分别保存数据
  5. Cakephp强制执行约定,而yii则具有灵活性。

答案 4 :(得分:4)

我不同意所有那些抨击Cakephp的人。作为两个框架的用户,如果你知道自己在做什么,Cakephp非常灵活,这意味着他们要求人们使用约定,但同样的文档告诉你如何解决这个问题。到目前为止,还没有提供真正的基准,所以你们都感到羞耻......

根据我的经验,我不得不为Cake进行性能调整,而不是Yii,所以我想我还不能比较一下应该如何工作或我希望工作的方式。此外,大多数基准测试都使用了Cakephp和其他开箱即用的框架,所以我希望Cakephp表现不佳。

答案 5 :(得分:1)

我和cakephp合作了大约2年,几乎完成了我在Yii的第一次。 (我也在ZendF做了一年并讨厌它) Cakephp对其严格的系统很有好处,但对其灵活性有很多限制。 Yii实际上是以我称之为“hack me”的方式完美制作的。最好的功能是它以一个空的Controller类开始你的一天,该类用于继承你的所有控制器。但很快我发现,我可以跳入并覆盖具有特殊应用范围的标准yii函数,例如render。在蛋糕中,你不能在你的应用程序代码中做太多的破解。你最终会进入核心目录寻找一些非常特殊的情况(当你进行核心更新时非常糟糕)。

与cakephp相比,yii中的插件/扩展程序非常容易创建。

cakephp直到我知道,不支持模块。我自己不是模块迷,但最终当你的应用程序代码增长时,你会希望将它拆分成一个单独的组,例如你可以将模块外包给其他人。

我相信,cakephp核心足够重,可以减缓高流量网站的速度。 ZendF更糟糕。在您调用操作时,Yii的调用堆栈较小。

没有cakephpt.php但是有一个yiit.php(单个文件中的整个框架,仅限生产用),使用apc / etc预先编译yii中的所有内容,并在系统文件打开调用中保存几毫秒。

YII的URL规则集及其反向算法对于php中的所有其他框架都是无与伦比的。与cakephp相比,IMO yii URL配置太容易了。然后,当你调用createUrl时,它开始从同一个配置中创建确切的浏览器URL,这会使你的app中的url只用配置文件更改。如果您选择将控制器/模块移动到单独的(子)域中,则只需更改配置,您的应用程序代码可能会保持粗心。

模型具有属性标签,规则的方式,也可以更改。所有模型方法支持get / post属性 - lifesaver。那么关系规则也比cakephp的能力要好得多。一些规则中的验证甚至原始的PHP代码都具有很大的灵活性。

非常灵活的文件路径约定也是yii独有的。然后子布局也可以很容易地创建视图的可重用性。

答案 6 :(得分:0)

我曾尝试学习Cakephp,但文档虽然广泛,但其结构很差。例如,在本手册的FormHelper部分,它讨论了表单选项而没有解释它是如何工作的,只是语法然后显示了html输出。对于像我这样的初学者,我想知道语法好,但是,收集的表单数据去了哪里,如何获取输入字段,如何指示表单输入去哪里,这对你来说意味着什么'创建表单的上下文',这是什么内容以及如何使用它等。

这是什么意思

  

"假设User hasAndBelongsToMany Group。在您的控制器中,使用选择选项设置camelCase复数变量(在这种情况下为group - > groups,或ExtraFunkyModel - > extraFunkyModels)。在控制器操作中,您将输入以下内容:"。

我确实研究过Codeigniter,它的解释非常直观,但Cakephp文档虽然很好地呈现,但并不能解释事情,但更像是参考手册。我目前正在研究Yii,虽然它比Codeigniter更复杂,但文档比Cakephp更具信息量,因此可以理解。

答案 7 :(得分:-4)

对于初学者来说,Yii对MVC更好,但是对于初学者来说,cakephp有点困难。 两者都是很好的框架,但Yii有更多的教程或文档可用于网络。