Andoni Larzabal
Dev back PHP/Symfony
Devops à mes heures perdues
Monomaniaque de la dette technique
Artisan des internets
Depuis 2018
AndoniLarz
Les sponsors du jour
Mais sans CDATA
Une refacto
Un endpoint qui renvoie du XML
Interdit de mettre du CDATA
Pas de budget ou de temps alloué
Refacto d'abord en JSON
A la fin, on normalisera en XML
Petit détail : on a des URLs dans nos données
Un ensemble de composants
Le Serializer
(Json, CSV, XML...)
class XmlEncoder
{
// ...
private function needsCdataWrapping(string $val): bool
{
return preg_match('/[<>&]/', $val);
}
}
Modifier directement le code dans les vendor
Ecrasé si je réinstalle les vendors
Fonctionne que sur mon PC
Ouvrir une issue sur le Github Symfony
Client moyen chaud
Proposer une PR, demande du temps
Hacker le XmlEncoder
# vendor/symfony/Component/Serializer/Encoder/XmlEncoder.php
<?php
namespace Symfony\Component\Serializer\Encoder;
// use classes...
class XmlEncoder
{
// other methods...
private function needsCdataWrapping(string $val): bool
{
return preg_match('/[<>&]/', $val);
}
}
# functions/functions.php
namespace Symfony\Component\Serializer\Encoder;
function preg_match(
string $pattern,
string $subject,
array &$matches = null,
int $flags = 0,
int $offset = 0
): int|false {
if ('/[<>&]/' === $pattern) {
return false;
}
return \preg_match($pattern, $subject, $matches, $flags, $offset);
}
Proposer une PR
Trouver ou créer l'issue
Chercher les règles & guidelines
Attendre la relecture
Forker le projet
Changes + tests
Trouver un mentor
Chercher dans la commu (Slack, Bluesky, etc.)
AndoniLarz