J'essai de faire un lien, mais avec cakephp il me rajoute tout le temps la base

http://www.mondomain.fr/contacts/www.unlienquelconque.com

au lieu de
http://www.unlienquelconque.com

j'utilise ceci.

<?php echo $this->Html->link($contact'Contact']'url'],$contact'Contact']'url'],false); ?>

comment faire pour retirer l'url de mon site qu'il prefixe automatiquement ?

12 réponses


Bonjour, 30s sur la doc de CakePHP m'ont permis à trouver la solution.

Je t'aide un peu, c'est dans le HtmlHelper qu'il faut chercher.

sylvain
Auteur

PFFF, me serait pas permis de poster sans avoir cherché.

J'ai trouvé un début de solution mais ca ne me satisfait pas.

<?php echo $this->Html->link($contact'Contact']'url'],'http://'.$contact'Contact']'url'], array('target' => '_blank')); ?>

Ca m'oblige en fait a verifier que l'url est saisi avec http, ou bien a la saisie j'ajoute le http ou je l'enleve selon les cas.

OK, voici la réponse à ton problème http://book.cakephp.org/2.0/fr/models/data-validation.html#Validation::url. On peut voir qu'il faut entrer un prtocole pour valider une url externe dans CakePHP.

Solutions :

1) tu passes par un lien normal (<a></a>), ce n'est pas parce qu'il y a des helpers qu'il faut tout le temps les utiliser. Ils ne sont que la pour aider lorsque l'on doit formatter une url avec un tableau controller/action/paramêtres. Utiliser la balise directement serait plus pratique, plus efficace et plus rapide en terme de traitement de la page, ça fera ça de moins à générer au chargement de la page html.

2) utiliser la règle de validation donnée plus haut et forcer l'utilisateur à mettre http://.

Pas de http:// sur ton lien

sylvain
Auteur

OK mais rien a changé en choisissant le lien a href basique

#Marche Pas :
<a href="<?=$contact'Contact']'url'];?>"><?=$contact'Contact']'projetname']; ?></a>
ca me donne un lien incluant mon domaine, http://www.mondomain.fr/lorem.fr

La doc dit ceci pour le helper Html->link

Creates an HTML link.  
If $url starts with "http://" this is treated as an external link.
Else, it is treated as a path to controller/action and parsed with the HtmlHelper::url() method.

Donc il faut ajouter manuellement le http si on a pas fait de validation, je trouve tout ca compliqué pour faire un lien.
D'autant plus que la je pense que c'est Cake qui complique mon affaire

Et la ou ca pose probleme, c'est que meme si je fais un simple a href, ça m'ajoute quand meme la base_url de mon domaine

sylvain
Auteur

Bon j'en ai eu marre , j'ai mis ça par défaut

<?php echo $this->Html->link($contact'Contact']'projetname'], 'http://'.$contact'Contact']'url']) ; ?>

C'est peut etre crado mais ça marche. Il vais ajouter un test afin de vérifier que http est présent ou non.

J'aimerais bien savoir le pourquoi et comment désactiver ce comportement

Salut as-tu essayer avec $this->Html->url() ?

<a href="<?php echo $this->Html->url($contact'Contact']'url'])?>"></a>
sylvain
Auteur

C'est pareil, des qu'ils s'agit d'une url externe , car préfixe meme avec url

Ok, fait simplement

<a href="<?php echo 'http://'.$contact'Contact']'url'] ?>"> BLA BLA BLA</a>

n'utilise pas link() dans ce cas là, pour gagner en performance ;)

Je ne pense pas que vous alliez dans la bonne direction. D'après la convention, un url est composée d'un protocole, d'un domaine, d'actiond et de paramêtres. C'est la raison pour laquelle les développeurs de CakePHP forcent l'ajout de ce protocole pour valider une url.

Vous essayez de résoudre un problème du model en le solutionnant dans la Vue et ce n'est pas bon. Tu devrais plutôt bloquer la validation du champ avant l'eregistrement à mon avis.

sylvain
Auteur

Ou dans le beforesave , j'ajoute le protocole ?
ca me gene de demander a l'utilisateur cette info, parce que ca n'a aucun interet sauf technique

si tu es sûr qu'il n'y aura que des url en http:// tu peux le faire dans le beforeSave mais je serais toi, je ne m'embeterais pas et je mettrais juste la validation. le protocole n'est pas un élément super compliqué pour un utilisateur, même basique. Surtout si tu lui demande son url, ça signifie qu'il a un minimum de background technique.