Just a quick update…

In the run up to the Known 1.0 release, I’ve made a small tweak to the back end caching objects. Essentially, they functionally work the same, but are implemented using symfony cache components.

Further down the line I’m thinking about replacing our cache entirely with symfony in order to allow for easier caching back ends, not to mention the far superior “cache contract” interface.

This is a low level thing, but useful if you’re a plugin developer to know what is coming down the pipe!

Ok, this caused a fair amount of hair pulling at my end, and I couldn’t find anyone else who had blogged about it… so..

I recently rolled Known’s Symfony components up from using the 2.x version of PDOSessionHandler to 4.x. I had tried this before, but I thought I’d have a fresh attempt at it, but ran into the same weird problems.

Sometimes things would work, but other times it wouldn’t, and the CI tests would consistently fail with a PDOException "There is no active transaction"

Symfony docs, and no amount of googling, got me nowhere. Eventually, reading through the code comments, I hit on the answer. So, I’m writing it here to make things clearer, and with hopes that someone else in a similar position doesn’t have such a frustrating time of it.

Turns out that PDOSessionHandler has switched to using transactions by default. Fine, but it turns out that this can cause some interesting interactions if you share the same database connection as used by the application (which was what we were previously doing, and was the standard way of doing things circa 2.x).

Your options then are either to create a second connection to the database, just for the session (which is not great for our purposes, as it would require two database connections per page load), or turn off transactions.

To do this, pass as an option:

Hope you find this helpful!