Id dans url est complet VS id récupérer juste le dernier chiffre
Résolu/Fermé
rdbn
Messages postés
95
Date d'inscription
samedi 3 avril 2021
Statut
Membre
Dernière intervention
26 décembre 2022
-
Modifié le 28 août 2021 à 16:29
rdbn Messages postés 95 Date d'inscription samedi 3 avril 2021 Statut Membre Dernière intervention 26 décembre 2022 - 1 sept. 2021 à 09:56
rdbn Messages postés 95 Date d'inscription samedi 3 avril 2021 Statut Membre Dernière intervention 26 décembre 2022 - 1 sept. 2021 à 09:56
A voir également:
- Id dans url est complet VS id récupérer juste le dernier chiffre
- Url c'est quoi - Guide
- Recuperer message whatsapp supprimé - Guide
- Recuperer video youtube - Guide
- Id telephone - Guide
- Mon compte facebook est piraté comment le récupérer - Guide
2 réponses
rdbn
Messages postés
95
Date d'inscription
samedi 3 avril 2021
Statut
Membre
Dernière intervention
26 décembre 2022
28 août 2021 à 16:32
28 août 2021 à 16:32
J'ai résolu mon problème en modifiant la route
/*@Route("/produit/{id}{label}", name="app_category_show")
j'ai passer l'id avant le label et maintenant je récupère bien mes id au complet
15 j'ai bien 15 et pas 5 mais pourquoi ? J'aurais voulus avoir l'id d'affiché à la fin..
J'aimerais donc juste comprendre si quelqu'un sait pourquoi cette différence ?
Merci :)
/*@Route("/produit/{id}{label}", name="app_category_show")
j'ai passer l'id avant le label et maintenant je récupère bien mes id au complet
15 j'ai bien 15 et pas 5 mais pourquoi ? J'aurais voulus avoir l'id d'affiché à la fin..
J'aimerais donc juste comprendre si quelqu'un sait pourquoi cette différence ?
Merci :)
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
30 août 2021 à 10:14
30 août 2021 à 10:14
Bonjour,
C'est étrange de concaténer deux paramètres dans un seul fragment d'url pour la route, du coup il me semble que tu ne récupère qu'un seul paramètre (avec pour valeur l'id et le label concaténé).
Puisque id est un entier et label une chaine de caractère, la conversion du paramètre dans le type désirée change selon l'ordre de concaténation :
Voir plus de détail à ce sujet sur la doc php concernant la Manipulation des types/Transtypage.
Généralement chaque paramètre d'url utilise un fragment de l'url :
@Route("/produit/{id}/{label}"
Ou éventuellement ajouter un séparateur (un tiret "-" par exemple) pour récupérer les deux valeurs manuellement séparées dans le contrôleur :
@Route("/produit/{id}-{label}"
Enfin si le champ label de ton entité est unique, tu pourrais utiliser uniquement ce paramètre pour avoir des url plus propres (voir la notion de slug dans Symfony). L'id qui correspond à la clé primaire est une donnée technique dont le visiteur ne devrait pas avoir connaissance, l'id ne devrait idéalement pas être dans l'url.
C'est étrange de concaténer deux paramètres dans un seul fragment d'url pour la route, du coup il me semble que tu ne récupère qu'un seul paramètre (avec pour valeur l'id et le label concaténé).
Puisque id est un entier et label une chaine de caractère, la conversion du paramètre dans le type désirée change selon l'ordre de concaténation :
$id = 15; $label = 'toto'; $param1 = $label . $id; var_dump(strval($param1)); // "toto15" var_dump(intval($param1)); // 0 $param2 = $id . $label; var_dump(strval($param2)); // "15toto" var_dump(intval($param2)); // 15
Voir plus de détail à ce sujet sur la doc php concernant la Manipulation des types/Transtypage.
Généralement chaque paramètre d'url utilise un fragment de l'url :
@Route("/produit/{id}/{label}"
Ou éventuellement ajouter un séparateur (un tiret "-" par exemple) pour récupérer les deux valeurs manuellement séparées dans le contrôleur :
@Route("/produit/{id}-{label}"
Enfin si le champ label de ton entité est unique, tu pourrais utiliser uniquement ce paramètre pour avoir des url plus propres (voir la notion de slug dans Symfony). L'id qui correspond à la clé primaire est une donnée technique dont le visiteur ne devrait pas avoir connaissance, l'id ne devrait idéalement pas être dans l'url.
rdbn
Messages postés
95
Date d'inscription
samedi 3 avril 2021
Statut
Membre
Dernière intervention
26 décembre 2022
31 août 2021 à 19:21
31 août 2021 à 19:21
Bonsoir,
alors merci pour ta réponse, d'une part j'ai entre temps résolu la question par rapport à l'id et effectivement il fallait le séparé dans la route comme tu le dis
@Route("/produit/{label}_{id}")
le tiret n'est pas autorisé dans les routes sur symfony mais on aurais pu mettre un "/" mais ceci montrerais que nous somme sur une autre page et ce n'est pas le cas.
De plus comme tu le dis plus haut et c'est juste, j'ai également directement comparé avec le label entités comme il est unique cela fonctionne également et c'est ce que j'ai fais tout le problème avec l'id ne se pose plus.
MAIS je ne savais pas du tout que passé un id dans l'url pourrais être gênant par rapport à l'utilisateur ou du moins comment il pourrait l'utilisé mal intentionnellement.. car un id pourrais bien être une valeur unique fixe sans incrémentation exemple FR', pour moi un mot de passe oui des données confidentielles également mais un id je ne vois pas trop mais je ferais des recherches concernant ce sujet c'est intéressant..
Merci pour ton message.
alors merci pour ta réponse, d'une part j'ai entre temps résolu la question par rapport à l'id et effectivement il fallait le séparé dans la route comme tu le dis
@Route("/produit/{label}_{id}")
le tiret n'est pas autorisé dans les routes sur symfony mais on aurais pu mettre un "/" mais ceci montrerais que nous somme sur une autre page et ce n'est pas le cas.
De plus comme tu le dis plus haut et c'est juste, j'ai également directement comparé avec le label entités comme il est unique cela fonctionne également et c'est ce que j'ai fais tout le problème avec l'id ne se pose plus.
MAIS je ne savais pas du tout que passé un id dans l'url pourrais être gênant par rapport à l'utilisateur ou du moins comment il pourrait l'utilisé mal intentionnellement.. car un id pourrais bien être une valeur unique fixe sans incrémentation exemple FR', pour moi un mot de passe oui des données confidentielles également mais un id je ne vois pas trop mais je ferais des recherches concernant ce sujet c'est intéressant..
Merci pour ton message.
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
>
rdbn
Messages postés
95
Date d'inscription
samedi 3 avril 2021
Statut
Membre
Dernière intervention
26 décembre 2022
Modifié le 31 août 2021 à 21:00
Modifié le 31 août 2021 à 21:00
Les tirets sont bien autorisés dans les routes, et heureusement ! Le plus souvent, c'est ce caractère qui sera utilisé comme séparateur de mot dans une url, et pas le symbole underscore qui est plutôt considéré comme faisant partie du mot.
Concernant l'id dans l'url, il ne s'agit pas d’utilisation malintentionnée (ça, c'est ta responsabilité en tant que dev de sécuriser ton application Symfony, "never trust user input").
C'est (légèrement) gênant dans le sens où ça n'apporte aucune information pertinente pour le visiteur.
Si je veux accéder au produit "Voiture de luxe", c'est plus clair en tant que visiteur d'accéder à la page /produits/voiture-de-luxe que /produits/voiture-de-luxe_17. Ici la clé primaire du produit (17) n'apporte rien pour le visiteur et l'url sera plus propre si on peut s'en passer (donc si le label dans ton cas, appelé généralement slug, a bien une contrainte d'unicité dans l'entité).
Encore une fois, se renseigner sur le concept de "slug" dans Symfony. Une première source : https://symfony.com/doc/current/the-fast-track/fr/13-lifecycle.html
Concernant l'id dans l'url, il ne s'agit pas d’utilisation malintentionnée (ça, c'est ta responsabilité en tant que dev de sécuriser ton application Symfony, "never trust user input").
C'est (légèrement) gênant dans le sens où ça n'apporte aucune information pertinente pour le visiteur.
Si je veux accéder au produit "Voiture de luxe", c'est plus clair en tant que visiteur d'accéder à la page /produits/voiture-de-luxe que /produits/voiture-de-luxe_17. Ici la clé primaire du produit (17) n'apporte rien pour le visiteur et l'url sera plus propre si on peut s'en passer (donc si le label dans ton cas, appelé généralement slug, a bien une contrainte d'unicité dans l'entité).
Encore une fois, se renseigner sur le concept de "slug" dans Symfony. Une première source : https://symfony.com/doc/current/the-fast-track/fr/13-lifecycle.html
rdbn
Messages postés
95
Date d'inscription
samedi 3 avril 2021
Statut
Membre
Dernière intervention
26 décembre 2022
>
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
Modifié le 1 sept. 2021 à 09:56
Modifié le 1 sept. 2021 à 09:56
Bonjour,
C'est noté pour les url :)
bas je pense que pour moi, les tirets ne sont pas configuré. Car quand je mets un tiret entre {label} - {nom_du_produit} j'ai cette erreur :
An exception has been thrown during the rendering of a template ("Parameter "***************" for route "**************" must match "[^/\-]++" ("*******************" given) to generate a corresponding URL.").
En passant le concept de slug je ne connaissais pas merci !
C'est noté pour les url :)
bas je pense que pour moi, les tirets ne sont pas configuré. Car quand je mets un tiret entre {label} - {nom_du_produit} j'ai cette erreur :
An exception has been thrown during the rendering of a template ("Parameter "***************" for route "**************" must match "[^/\-]++" ("*******************" given) to generate a corresponding URL.").
En passant le concept de slug je ne connaissais pas merci !