从Rails 3.2到Cake PHP 2.0.如何做一些Rails常见任务?

Bru*_*ias 12 cakephp ruby-on-rails cakephp-2.0 ruby-on-rails-3

我的目的不是进行比较或讨论哪个框架更好.我知道CakePHP和Rails的力量.我确信在这两种方法中都有办法做类似的事情.

所以,情况就是这样:在Rails框架中,我习惯于做一些我想在CakePHP上做的事情(其中一些我在文档中没有找到).

他们是:

包管理

在Rails中,我有"Gemfile"文件,我在其中编写应用程序中使用的每个"gem"的版本.如果我想升级或降级,我更改版本并运行"bundle update"命令.你如何更新插件?你是否使用像GIT这样的工具来检查每个版本的新版本?

迁移

当我需要更改数据库时,我通过控制台命令"rails generate migration"创建一个空的"迁移"文件.然后,在生成的文件中,我添加更改,例如"rename_column:users,:address,:location".之后,我运行"rake db:migrate"并迁移数据库.如何在CakePHP上做到这一点?

自动部署

使用"Capistrano"ruby gem可以使Rails中的部署自动化.基本上,我在命令行中运行"cap production deploy".然后,根据"deploy.rb"文件中的说明,它将登录到服务器,从git存储库克隆最新版本的代码,并备份当前版本,以便我可以回滚.它还可以为"共享"文件夹(如用户上载)创建符号链接,重新编译资产,运行挂起的迁移,安装新的依赖项,重新启动某些服务器进程,重新启动应用程序本身,以及执行其他命令行任务.CakePHP上有类似的东西吗?

资产压缩

在Rails中,当我处于生产模式时,CSS和JS资产会自动编译为单个文件,并在每次部署后重新生成.这是Rails 3.1+中的原生功能.CakePHP可以吗?

工人和背景工作

Rails可以使用名为"delayed_job"的gem将"工作者"在后台执行的任务排入队列,例如,在用户注册后发送电子邮件.你是怎样做的?

控制器的命名空间

如果我想创建管理界面或Web服务(例如使用"api"命名空间)或"移动"命名空间,我只需在"controllers"文件夹中创建相应的文件夹.然后,我将控制器放在那里并创建访问它们的路径.什么是在蛋糕上做到这一点的最佳方式?

从视图访问模型方法

当我从数据库中获取数据时,似乎CakePHP返回一个关联数组,而不是真正的"对象".所以,我无法访问模型方法.假设我的UserModel类提供了一个名为"age"的方法,该方法根据用户的生日计算用户当前年龄.在Rails中,我可以在视图上执行此操作:<%= @ user.age%>.我需要在Cake上创建一个视图助手吗?像calc_user_age($ user); ?>(或类似的东西)?另一种情况:假设我想从用户那里获得最后的评论,并在评论中使用帖子标题插入相关帖子的链接.在Rails中,我会做类似@ user.comments.last.post.title的内容来获取帖子标题.我怎么能在Cake中做到这一点,而不使用那些获取大量不必要数据的"recursive = 3"功能?

链式模型范围

我们假设我有一个名为Post的模型.在Rails中,我可以在模型上创建范围并按照我想要的方式混合它们.例如,如果我想获得"最常访问的类别编程类别中的5个最后发表的帖子",我会这样称呼:"Post.published.from_category("programming").most_accessed.limit(5 )".如果我只想要最近订购的草稿,与分页相结合,我会称之为"Post.drafts.recent.page(2)".在CakePHP上创建和链接范围的最佳方法是什么?动态构建一系列条件并将其作为"find"的参数发送?

测试

CakePHP社区采用了哪些测试工具?我需要测试模型及其方法,测试控制器及其响应和变量,测试视图内容(也是Javascript交互),创建夹具等.我也知道是否有办法创建类似自动测试的东西,在文件保存后运行测试.

嗯,基本上这些是要点.很抱歉这篇长篇文章,以及我容易出错和冗余的英语(我不是母语人士).另外,我不是专家.所以,我可以在这里写一些错误的东西.

希望我们能有一个很好的对话.谢谢!

bur*_*zum 12

包管理

AFAIK没有最新的和广泛使用的包管理器.通常我们使用git添加插件.我认为插件在RoR中等同于宝石.

编辑:现在有CakePHP现在使用的composer和很多插件.

迁移

使用CakeDC迁移插件构建模式shell.

自动部署

我们使用面料.Afaik没有蛋糕插件可以做我知道的事情.

资产压缩

使用此插件.

控制器的命名空间

只需将它们放入控制器文件夹并使用路由器为它们创建路由.您为Rails描述它的方式相同.

从视图访问模型方法

嗯?你在Rails中做到了吗?我不喜欢它.在CakePHP中你不应该这样做而IMO不在任何MVC应用程序中.

从控制器设置视图中所需的数据.

$this->set('data', $this->Model->yourMethod()); 
Run Code Online (Sandbox Code Playgroud)

工人和背景工作

这可以通过编写shell来完成.

链接模型

CakePHP中的链接模型是通过关联完成的.是的,他们可以像$ this-> User-> Post-> find('first')那样访问.您还可以在多个表上构建复杂的查找查询和条件.

测试

CakePHP使用phpunit进行单元测试.在CakePHP书中阅读关于它的这一部分.

我的推荐

阅读本书:book.cakephp.org它肯定会回答你的大部分问题并告诉你如何思考.2.0版本的文档质量非常好.