我的目的不是进行比较或讨论哪个框架更好。我知道 CakePHP 和 Rails 的强大功能。我确信有一种方法可以在两者中做类似的事情。
所以,情况就是这样:在 Rails 框架中,我习惯于做一些我想在 CakePHP 上做的事情(其中一些我在文档中没有找到)。
他们是:
包管理
在 Rails 中,我有一个“Gemfile”文件,我在其中编写了应用程序中使用的每个“gem”的版本。如果我想升级或降级,我更改版本并运行“捆绑更新”命令。你如何更新插件?您是否使用 GIT 之类的工具来检查每个新版本?
迁移
当我需要更改数据库时,我通过控制台命令“rails generate migration”创建了一个空的“迁移”文件。然后,在生成的文件中,添加更改,例如“rename_column :users, :address, :location”。之后,我运行“rake db:migrate”并迁移数据库。如何在 CakePHP 上做到这一点?
自动化部署
Rails 中的部署可以使用“Capistrano”红宝石 gem 实现自动化。基本上,我在命令行中运行“cap production deploy”。然后,根据“deploy.rb”文件上的说明,它登录到服务器,从 git 存储库中克隆最新版本的代码,并备份当前版本,以便我可以回滚。它还可以为“共享”文件夹(如用户上传)创建符号链接,重新编译资产,运行挂起的迁移,安装新的依赖项,重新启动一些服务器进程,重新启动应用程序本身,并可以执行其他命令行任务。CakePHP 上有类似的东西吗?
资产压缩
在 Rails 中,当我处于生产模式时,CSS 和 JS 资产会自动编译为单个文件,并在每次部署后重新生成。这是 Rails 3.1+ 的原生特性。在 CakePHP 上可能吗?
工人和后台作业
Rails 可以使用名为“delayed_job”的 gem 将任务排入队列,以由“workers”在后台执行,例如在用户注册后发送电子邮件。你是怎样做的?
控制器的命名空间
如果我想创建管理界面、Web 服务(例如,使用“api”命名空间)或“mobile”命名空间,我只需在“controllers”文件夹中创建相应的文件夹。然后,我将控制器放在那里并创建访问它们的路由。在 Cake 上最好的方法是什么?
从视图访问模型方法
当我从数据库中获取数据时,CakePHP 似乎返回了一个关联数组,而不是真正的“对象”。所以,我无法访问模型方法。假设我的 UserModel 类提供了一个名为“age”的方法,该方法根据用户的生日计算用户的当前年龄。在 Rails 中,我可以在视图上执行此操作:<%= @user.age %>。我需要在 Cake 上创建一个视图助手来执行此操作吗?像 calc_user_age($user); ?>(或类似的东西)?另一种情况:假设我想获取用户的最后一条评论,并在评论中使用帖子标题插入指向相关帖子的链接。在 Rails 中,我会执行类似 @user.comments.last.post.title 的操作来获取帖子标题。如果不使用获取大量不必要数据的“recursive=3”功能,我怎么能在 Cake 中做到这一点?
链接模型范围
假设我有一个名为 Post 的模型。在 Rails 中,我可以在模型上创建范围并按照我想要的方式混合它们。例如,如果我想获取“按访问最多的编程类别中最后发布的 5 个帖子”,我会这样称呼它们:“Post.published.from_category("programming").most_accessed.limit(5 )”。如果我只想要按最近排序的草稿帖子,并与分页集成,我会调用“Post.drafts.recent.page(2)”。在 CakePHP 上创建和链接作用域的最佳方法是什么?动态构建条件数组并将其作为“查找”的参数发送?
测试
CakePHP 社区采用了哪些测试工具?我需要测试模型及其方法,测试控制器及其响应和变量,测试视图内容(还有 Javascript 交互),创建固定装置等。我还想知道是否有办法创建类似自动测试的东西,在文件保存后运行测试。
嗯,基本上就是这些了。对不起,很长的帖子,以及我容易出错和多余的英语(我不是母语人士)。另外,我不是专家。所以,我可以在这里写一些错误的东西。
希望我们能好好谈谈。谢谢!