CakePHP适用于大型项目

nin*_*ino 5 php frameworks cakephp

我们正在为一个高效的网站评估一些PHP框架.CakePHP看起来很有趣,但我们不知道它是否符合我们的需求.

基本上,当您查看CakePHP的文档和教程时,它看起来非常有前景.然而到目前为止,总有一些东西让我对框架产生了麻烦,也许已经在生产项目中使用CakePHP的人可以为我回答这个问题?

  • 在CakePHP中,单个记录的写入/读取数据看起来非常简洁.如果您想从具有复杂条件的多个表中读取数据,group by,where子句会发生什么?CakePHP如何处理它?
  • 脚手架看起来非常适合基本的管理界面.定制这些东西有多容易.假设我的一张桌子上有一个外键.当我创建一个脚手架页面时,CakePHP会自动为我创建一个包含所有可能项目的下拉列表吗?如果我想过滤可能的项目怎么办?假设我想将两个字段组合到视图部分中的一个字段中,但是当我编辑它时,我应该能够单独编辑这两个字段.这有用吗?
  • 你认为使用CakePHP开发的速度比使用普通的PHP更快吗?

joe*_*oeb 8

我已经使用了CakePHP,Zend Framework,我还"从头开始"编写了应用程序,只不过是本土类等.为此,我想提一下我经常使用CakePHP,所以请按照你的意愿去做.

  • (写入/读取数据,复杂的条件)你当然可以做你提到的一切.其他人是正确的,因为它试图为你抽象出SQL操作.我还没有查询到我无法翻译成Cake的"用语"; 复杂的地理空间查询,连接等

  • (脚手架,复杂的条件)脚手架实际上只是作为各种"跳跃开始",以帮助确保您的模型关联等正确设置,不应该用作永久解决方案.为此,是的,它会在反省您的关系和提供相关标记方面做得相当不错.

  • (更快的发展)当然.有一个庞大的社区,有大量的插件或示例可以帮助您入门.无论你选择什么,选择一个框架几乎肯定会让你"更快",如果只是为了处理设置应用程序时的细节.


San*_*hal 8

这实际上取决于你对"大"的定义.你指的是大数据集吗?一个非常复杂的领域模型?或者只是很多不同的控制器/动作?

写/读数据.

您可以在CakePHP中使用纯SQL执行任何操作.它可能并不总是很好,但最糟糕的是它并不比直接的SQL差.

但你真的不应该考虑查询.您应该考虑您的域模型.CakePHP实现了活动记录模式.如果您的域模型很好地映射到活动记录模式,它的效果非常好.但如果没有,那么我不会推荐CakePHP.如果您的域模型没有映射到Active Record,那么您将花费大量时间来对抗Cake的做事方式.这没什么好玩的.使用实现Data Mapper模式的框架(例如Zend)会更好.

脚手架

脚手架是暂时的.它确实处理外键(如果你在模型和数据库中定义它们),但就是这样.你不能修改脚手架.但是,你可以烤它们!

当您烘焙控制器或视图时,您基本上将脚手架写入文件作为您自己实现的跳转点.烘焙后,您可以做任何您想做的事情.烘焙的缺点是,当模型或数据库发生变化时,它不再更新.因此,如果您烘焙控制器和视图并向模型添加字段,则需要手动将这些字段添加到控制器并查看代码.

发展速度

就我而言,我在使用CakePHP开发一个网站然后用普通代码加快了.但只有Active Record适合应用程序!看到我的第一点.即便如此,Cake可能仍然更快,但我会更快地使用更好的适合框架.

其他一些想法

大数据集

如果你有非常大的数据集和大的查询结果,那么Cake可能是个问题.find()操作想要返回一个关联数组,因此所有行都被读取,解析并转换为数组.如果结果集太大,则内存不足.CakePHP没有像许多其他Active Record实现那样实现ResultSet对象,这是一个明确的缺点.您最终使用子查询手动分页您自己的数据.呸.我带来了下一点:

阵列

学会爱他们,因为CakePHP.一切都是一个阵列,往往是大而复杂和深刻的.一段时间后它真的很烦人.您无法向数组添加函数,因此您的代码比CakePHP使用嵌套对象实例时更加混乱.您可以添加到这些对象的功能可以帮助您保持代码清洁.

奇怪和不一致

CakePHP内部隐藏着一些真正令人讨厌的东西.如果Active Record适合您的应用程序,那么您可能永远不会碰到它们,但如果您尝试将CakePHP塑造成更复杂的东西,那么您将不得不对抗这些.一些例子:

  • HABTM通过自定义模型使用您正在处理的关系的另一侧的定义.
  • 一些非常奇怪的地方,你的前/后触发器没有被调用(例如,不是来自updateAll)
  • 奇怪的Model-> field()行为.它始终从数据库查询.因此,请小心更新模型数据,而不立即将其保存到数据库中.一些CakePHP函数从Model - > $ _ data获取数据,一些使用Model-> field().结果可能完全不同,导致一些非常难以追踪的错误.

简而言之

我强烈推荐CakePHP,即使是"大型"网站,只要您的域模型非常适合Active Record.如果没有,请选择不同的框架.