Skip to content

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