PHP / Symfony / Laravel / AI
Upgrade notes, written after living with the release.
PHP developer since 2013, senior Symfony developer by trade, based in Metro Manila. Posts here go up two or three months after the version they cover, once there is something to say beyond the changelog.
-
PHP 7.2, libsodium, and the password hashing we finally fixed
A users table with md5 and salted sha1 in one column. Why PHP 7.2 does not let you bulk convert any of it, why Argon2i needed a build flag we did not have, and the rehash-on-login code that works.
-
Laravel 5.6 for a client dashboard, from a Symfony habit
My first substantial Laravel project after four years of Symfony: facades versus constructor injection, an N+1 that cost 118 queries, the 5.6 logging rewrite, and the scheduled report that ran three times.
-
Symfony 4 and Flex, or how the skeleton got small
Two days converting a 2.8 app with one AppBundle to Symfony 4.0. The directory move, Flex recipes, parameters.yml becoming .env, and what private services break. Also why the bigger client app stays on 3.4.
-
The tests we stopped writing
I deleted 212 tests from a 912-test suite and the build halved. Notes on which tests earn their place: getter assertions and mock transcripts went, money arithmetic and timezone boundaries stayed.
-
Doctrine migrations, and why the Friday deploy broke
A generated diff, a NOT NULL column with no default, and a deploy that ran migrations before it flipped the symlink. 213 failed inserts on a Friday evening, and the expand and contract ordering I should have used.
-
MySQL 5.7 JSON columns, and the regrets that followed
A support lookup read 2.4 million rows to return 41 of them, because the predicate sat inside a JSON document. The generated column fix, the two details that broke it first, and what I keep out of documents now.
-
PHP 7.1 in a codebase that still remembers 5.3
PHP 7.1 shipped on 1 December. Nullable types and iterable let me delete guard clauses across 31 functions. ArgumentCountError cost a day and a rollback, and the mcrypt deprecation is a backfill, not a rename.
-
jQuery 3 and the code we kept
The admin is 40,000 lines of jQuery and we moved it to 3.1.1. What the Promises/A+ rewrite of Deferred actually broke, why fractional widths made a page slow, and why we are not rewriting.