Experience with CraftCMS 3

I’ve been working with CraftCMS (v3.1) + Craft Commerce for the last couple of months and initially I was pleased with it. You can do so many things with the system and the existing plugins that you would think that everything can be done with ease. Then I had to create few custom plugins. And oh boy, things started to go south quickly. So here’s my pros and cons for CraftCMS.

Short background: I was a Laravel (based on Symfony) developer for few years (around v5) and absolutely loved it. I had a pretty good relation with PHP back then but few years has passed and things has changed in me. I’ve got accustomed to TypeScript (NodeJS, Angular, Vue), C# (.NET Core) and DartLang so I decided to hop back on a PHP to see how it feels after few years of absence.

Note: This article might not be accurate for further versions.

Pros

  • Easy multisite environment management.
  • Good file storage integration with cloud providers.
  • Good fit for more frontend oriented project with scope that fits the available feature set.
  • The documentation is acceptable if you are only going to use existing features and you don’t really have to touch anything else other than twig templates.
  • If you are used to Yii stuff, it’s going to be easier for you to get started.
  • There’s a pretty good Stackoverflow community for you to get help from (you’ll need it).

Neutral

  • Based on Yii so it’s going to be familiar for those who already knew it but will be strange for those like me who came from Symfony.

Cons

  • Real developer documentation? I had to manually go through thousand and thousand lines of code to find out how to do basic things because there’s almost no official documentation beyond Twig templates. The framework heavily relies on “PHP’s magic” which becomes a problem quickly without proper examples. At least have software architecture diagrams to get me started. (+ ElementIndex documentation?)
  • Huge, monolit methods. Forget that you can reuse seemingly common code blocks. Crafts tends to have many hundred lines methods so if you need anything you better-off just copying it. Just check out those controllers.
  • Unpredictable occurring slow responses.
  • Admin package installation sounds great but most of the time it just freezes the whole thing. I tend to stick with the console counterpart.
  • Inconsistent codebase. It’s clear that the code evolved through ad hoc needs. I cannot expect anything to be in the codebase without checking. You can think about basic things like updating element trees via a service.

Conclusion

Choosing the unknown