There are multiple PHP native ways to convert umlaute and other special characters to ascii save formats, but most of them i experience insufficient in the one or other way.
Since i am using symfony anyway i can use the String component which has a handy slugger which converts any characters into safe ascii characters. It is very flexible and can be customized with locales, custom replacements and closures.
Since SilverStripe 4.10 is not yet fully ready for PHP8.1 you wil receive quite some deprecation warnings in dev mode when you are brave and run it nonetheless on PHP8.1.
Deprecated: SilverStripe\Config\Collections\MemoryConfigCollection implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /var/www/html/vendor/silverstripe/config/src/Collections/MemoryConfigCollection.php on line 13
Unfortunatly we can’t control the error_reporting from SilverStripe since it is set in the kernel of the framework. So we are forced to hack the Kernel which is rather unfortunate.
In the SilverStripe Slack channel someone proposed to use composer-patch which will apply a patch to a given vendor dependency during composer install. This is quite cool because you don’t need to fork the dependency and take care of getting upstream changes.
The psr/log package used to have not only the Interface for PSR-3 Logger, but also actual implementations of the interface like the TestLogger. The TestLogger could be used as mock for any PSR-3 Logger in your test cases.
We will use the csv package from the CSV project which has some sophisticated packages to parse and transform csv data with nodejs streams.
npm install csv
We will further use node as ESM (ECMAScript modules) to be shiningly modern and so lets create a file: index.mjs Note the .mjs extension, which will tell node to interprete this as ESM. (Since nodejs v12.20.0 && v14.13.0)
We import the packages and create the filesystem streams to read the file, then built a pipeline with the streams and the single steps to process the data and write the results into a new file. Ok let’s go:
When using bin/console make:entity on Mysql and then later you switch your application to Postgres and you have a table called user, which you most likely have when using security component of Symfony. Then you will receive an error because user is a reserved word in Postgres!
An exception occurred while executing 'INSERT INTO user (id, email, roles, password, is_verified) VALUES (?, ?, ?, ?, ?)' with params [3, "email@example.com", "", "your-encrypted-password", 0]: SQLSTATE: Syntax error: 7 ERROR: syntax error at or near "user" LINE 1: INSERT INTO user (id, email, roles, password, is_verified) V...
So here is nice chain of docker errors and its solution.
1. Docker has reached its maximum of created networks and errors like this:
ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
The easiest (and most brute though) solution to this is to prune all networks, as suggested here on SO.
docker network prune
This will delete all networks that are not connected to currently active containers. But this also means it will delete all networks of your not runnning dev projects. (Which might be numerous as in my case.)