最近尝试将自己的一些Drupal网站转移到Symfony(这个个人博客就是其中之一),下面分享一些转移过程的心得,主要包括Drupal基本功能在Symfony上的实现。

用户管理

FOSUserBundle提供用户登录、注册、找回密码等基本功能,并且提供个可选的Group功能,将用户分组,按组设定权限。

权限管理

  • 对于常规路径的权限(类似Drupal的HookMenu),Symfony 可以在security中根据角色权限配置,结合FOSUserBundle的分组功能可以容易搞掂。
  • 对于某个特定内容的CRUD权限,Symfony可以用Voter的方式来设定

管理后台

使用SonataAdminBundle,只需要简单的编写一个服务,就可以完成常规的CRUD后台,对于特定需求,可以通过extend CRUD Controller的方式完成,而针对非CRUD类的管理后台,可以使用自定义页面

Hook钩子

Drupal中钩子可以说是最基础的功能,而Symfony中可以很方便的用Event来实现。

数据迁移

  • 对于简单型网站(如这个博客),可以使用 node_export 模块导出XML文件,然后在Symfony下写个Command导入内容。

  • 用户或者内容结构较为复杂的网站,可以直接写Command,通过分析数据库结构用SQL语句导入内容。

  • 由于Symfony与Drupal的密码加密方式不一致,我们可以使用自己的PasswordEncoder服务,覆盖 isPasswordValid 方法,对旧密码加密方式做兼容。

  • 对path的兼容比较麻烦,在此的处理方式是使用一个controller专门做旧内容的跳转。当然,也可以通过监听 NotFoundHttpException 事件来进行处理跳转

比Drupal更好用的功能

首先,最明显的就是网站速度变快了,并且Symfony可以有多种方式来管理缓存,优化性能,而Drupal针对登录用户的缓存功能相对较弱。

针对开发者而言,网站deploy变得非常简单,使用capifony以及doctrine migrations,一条命令可以搞掂。

网站模板不在是一件痛苦的事情,使用twig基本上可以完美的将一个html模板重现;而Drupal,可能70%以上的时间需要花在模板上。

更新:现在网站已迁移到github。