At a high level the WordPress community doesn't mesh because of having the WordPress way of doing things, and having a history of writing for old versions of PHP years after others have moved on and told users to upgrade. The WordPress community is fragmented into separate sub-communities which again don't mesh. There's the users who only build sites with page builders and hardly know how to code, those whose goal is to sell copies of their paid plugin (or hosting services), and those with permission to make changes to WordPress itself.
I've no recent experience of Drupal so can't comment on them.
I’m super happy to have spent that time learning how to work with constraints to build absolutely giant systems (had a stint with an agency that worked for big online publishers that are known for using WP…) but after seeing the other side, I’m also happy to be past that and onto different and more interesting things.
Lesson 1: Use the best tools available.
There's a reason why Laravel is more popular than Symfony.
On the other hand, Laravel decided to change from snake_case to CamelCase between versions 3 and 4, just because. Literally 0% compatibility
Also, this is very regional.
Here in Europe, actual, big projects that need to make money use Symfony, not Laravel.
My biggest takeaway is Laravel is fast to get up and going with and ship something, while Symfony actually scales and is far more easily maintainable
If I were to choose building an app I expect to last I’d choose Symfony every time
Can confirm. We started on Laravel 4 and it languished at that version until someone in leadership agreed to get it updated to version 8, which seemed to mostly be about some APIs changing. (The configuration system changed quite a bit for example.) Further upgrades from 8 to 10 then 11 have been very quick. (Note that we don't use Eloquent ORM so that wasn't part of these upgrades.)
But ultimately it got better IMO, indeed.
Laravel is designed from the ground up to be used by junior developers who don't care about pesky things like maintainability and scalability and just want to put out the minimum viable product as fast as possible, and with the least amount of work possible. It's full of "magic" abstractions built with the primary purpose of making the code look pretty at a glance to the inexperienced, completely disregarding good programming practices and even essential language features in the process, the programming equivalent of lipstick on a pig. It markets itself to beginners as "the magic framework that does everything for you" and is as big as it is today purely due to successfully capturing a large percentage of that audience.
Symfony goes in the complete opposite direction: it's designed to be used by experienced developers to build maintainable, extensible applications while employing good programming practices. It encourages you to "look under the hood" and understand how things work instead of just telling you "to do X, write Y" without elaborating. It has many convenience features but they're generally built on top of language features with good practices in mind instead of handwaving it all away. It's very modular and allows you to extend and/or replace almost every part of the framework with your own custom version if the included version isn't suitable for your use case. And so on.
One of the best examples of Symfony vs Laravel is the way database tables are mapped to PHP code. In Symfony, SQL tables are just PHP classes. To create a new table, you create a new class, add the columns you want as properties, add some attributes to tell the ORM how to map all of that to a table, and it's done. Your database columns match your class properties, every time you query the database you get instances of that class and can use them as a proper objects with properly typed fields.
Laravel, meanwhile, does none of that, your database tables are defined purely by the database itself at runtime, what they call "Models" are just empty classes that have the database columns injected into them at runtime as dynamic properties. You cannot know what properties your Model has just by looking at it, I believe you need a Laravel-specific IDE plugin just to autocomplete them. You're essentially working with glorified associative arrays the whole time. This alone is a massive red flag that should make any experienced programmer avoid Laravel.
Wordpress sits on its own little island as a big pile of legacy code that's almost frozen in time, full of bad practices that no self-respecting developer wants to touch. No lipstick on this pig, it's as ugly as it is obtuse. It's still commonly used today because someone with zero programming knowledge can load up a bunch of plugins full of security holes and make a somewhat usable site that vaguely matches their vision, but using it for any new project more complex than a basic blog is generally seen as a mistake.
Can't speak for Drupal as I have no experience with it.
Drupal took their time but finally started using composer and a lot of their components were Symfony components.
Wordpress just held their ground.
Laravel is more akin to rails with its rapid application development but rails does it better.
Maybe they need to stay close to the metal based on the performance they need?
Things which you were able to configure in the past, are now hidden. The meaning of many files (e.g. bootstrap) is now completely different. All different service provider classes are gone.
All subsequent upgrades have been easier (if not always easy) by comparison - it was kind of a one time thing.
I just pulled a PHP site out of my archive that I had taken down 7 years ago. Only one function call (each) had been removed, and everything else still works. There's been some major changes in some parts of PHP though; if I had been following along, I'd have gotten a deprecation warning, but I jumped two or three major versions.
I'd be pretty confident in any Perl code written for 5.8 or newer to continue working, with CPAN libraries as well. Earlier code is probably ok as long as you don't deal with binary data or non-ascii characters; 5.8 was the unicode reckoning.
If you ran FreeBSD 4, most of FreeBSD 13 will feel familiar. Although if you had a kernel driver for FreeBSD 4, it will likely need a lot of help to work in FreeBSD 13.
Of course, there are other communities where everything is thrown away every 6 months. I don't have that kind of time.
It's fine if you don't like that pattern (I have my own misgivings), but it's a perfectly viable approach used by a lot of very experienced developers to build very successful applications.
Dismissing everyone who uses a framework or design pattern you dislike as "junior developers who don't care about pesky things like maintainability and scalability" is inaccurate, rude, and ignorant.
"Lots of people use it" doesn't make it good. Lots of people in the past have written "successful" web applications as loose PHP files with little structure, no classes, using associative arrays everywhere (including me when I was starting out), but today it's generally agreed upon that this is not a good idea and will result in more bugs, maintenance headaches and an all around inferior developer experience, so what makes "active record" different?
I'd understand your point if it had at least some advantages over the ORM approach to make up for the clear disadvantages, but I just don't really see any beyond "it seems easier and requires writing less code" (which, as I said, primarily appeals to beginner developers who just want to get things done as fast as possible and don't understand the long-term consequences). Are there any hidden advantages I'm not aware of?
I issue a `cargo update` to upgrade the leaf dependencies and do automatic minor version updates. Issue cargo check. Some new warnings from `clippy`, but it still compiles and runs without problems. Could have deployed for 5 more years, but I decided to experiment more...
I upgrade some of the libraries to major new versions - I am experienced and I know which ones will upgrade without problem. They do upgrade without problem. Could have deployed for 5 more years but decided to walk the extra mile...
I upgrade the more problematic ones, especially actix_web, the web framework, which had a massive rewrite and a huge new release with almost completely different API surface... It's a bit difficult to understand the changes, especially some parts of the old code written for the old version (which I no longer remember), but in an hour I'm done. Afterwards `cargo outdated` does not report any outdated libraries. I deploy for the next 5 years. Zero problems since then.
Well, it's not decades yet, but I can imagine similar effort to maintain it over the next decade.
The PR in question: https://github.com/laravel/framework/pull/48078
> taylorotwell commented on Sep 13, 2023 > I personally don't have the knowledge to trust merging this sadly. I would > prefer to either de-document cache tags or recommend their use with Memcached > only. Cache tags and Redis have been a maintenance and complexity nightmare.
https://github.com/laravel/framework/pull/48078#issuecomment...
I didn't say it was good (or bad), I said it's a perfectly viable approach.
> Lots of people in the past have written "successful" web applications as loose PHP files with little structure, no classes, using associative arrays everywhere (including me when I was starting out), but today it's generally agreed upon that this is not a good idea.
You're right, which is why, in 2025, no experienced developer builds web applications in this way.
Plenty of experienced developers build web applications using the active record pattern.
>Are there any hidden advantages I'm not aware of?
You mean aside from others having a different opinion about the relative pros and cons of active record, or personal preference?