Incohérence du type de l'argument contexte pour fonctions urls_decoder_url et urls_page_dist
La fonction urls_decoder_url
reçoit un argument $contexte
qui est un tableau associatif. Elle peut aussi être appelée sans $contexte
, par exemple par form_hidden
qui fait $p = urls_decoder_url($action, '')
. Dans ce cas, le $contexte
prend sa valeur par défaut : []
un tableau vide.
Cette fonction calcule une fonction $renommer. Par défaut, en l'absence de 'type', cette fonction c'est urls_page_dist
, qu'elle soit calculée par generer_url_entite('', '', '', '', true);
(voir ici) ou via $renommer = charger_fonction('page', 'urls');
.
Puis cette fonction est appellée : $a = $renommer($url, $fond, $contexte);
.
Or l'argument $contexte
est un tableau, alors que la fonction urls_page_dist
appelée attend une chaine en argument.
Ça semble indiquer un problème, qui se confirme par la suite. C'est en voulant implémenter des urls raccourcies sur un objet que je tombe là dessus (/123 est l'url publique visible et présente la page de l'objet 123), mais le problème semble plus général.
Là, si le premier argument ($url) est un entier, alors c'est _generer_url_page
qui prend immédiatement la main, avec la même attente de chaine concernant son 3eme argument, $args
, qui reçoit le tableau $contexte
, et qui finit par le concatèner aux autres chaînes reçues, générant un warning en php7.3.
PS1 : c'est assez compliqué vu la variété des cas prévus, les surcharges possibles en pas mal d'endroits, des fonctions réparties dans 4 ou 5 fichiers, la compatibilité avec des schémas d'urls historiques... PS2 : du coup ces fonctions mériteraient une meilleures documentation