Salut à tous,
j'ai suivi ce doc http://book.cakephp.org/2.0/fr/appendices/new-features-in-cakephp-2-0.html#routes-peuvent-retourner-des-urls-completes
pour avoir cette résultat dans l'URL : http://test.localhost/posts/add
mais j'obtiens le lien suivant http://localhost/posts/add/subdomain:test
Avez vous des idées!!
Merci d'avance
Bonjour.
Pourquoi l'url de la route contient :slug
?
Si tu veux que ça retourne http://test.localhost/posts/add il te faudrait mettre quelque chose comme /posts/add
au lieu de /:slug
.
Non, les déclarations de sous-domaine doivent être faites dans le fichier hosts et si tu es tenté de faire quelque chose comme :
127.0.0.1 localhost
127.0.0.1 *.localhost
Ce n'est pas possible.
As tu fait cette parti la ? http://book.cakephp.org/2.0/fr/development/routing.html#classes-de-route-personnalisees
Bonjour.
Il ne suffit pas de créer une classe personnalisée pour le Router
, pour qu'elle soit prise en compte par l'application.
Je te conseille fortement de consulter la documentation plus en profondeur, surtout concernant les routes personnalisées.
Bonjour,
voila mon code :
//SubdomainRoute.php
<?php
App::uses('CakeRoute', 'Routing/Route');
class SubdomainRoute extends CakeRoute {
public function match ($params) {
$subdomain = isset($params['subdomain']) ? $params['subdomain'] : null;
unset($params['subdomain']);
$path = parent::match($params);
if ($subdomain) {
$path = 'http://' . $subdomain . '.localhost' . $path;
}
return $path;
}
}
// view.ctp
echo $this->Html->link(
'add',
array('subdomain' => 'test', 'controller' => 'posts', 'action' => 'add')
);
//routes.php
App::uses('SubdomainRoute', 'Routing/Route');
Router::connect('/:slug',
array('controller' => 'posts', 'action' => 'add'),
array('routeClass' => 'SubdomainRoute')
);
résultat : test.localhost (Page Web inaccessible) au lieu de test.localhost/posts/add
C bn il m'affiche le lien http://test.localhost/posts/add
mais :( The requested URL /posts/add was not found on this server.
par exemple si je veux afficher la liste des annonces dans une ville
il faut l'afficher avec cette url nice.localhost/annonce/liste_annonces
//dans mon controlleur
public function liste_annonces($ville=null){
$this->paginate['Annonce']['limit'] = 4;
$this->paginate['Annonce']['conditions'] = array(
'Annonce.ville LIKE' => $ville
);
$this->set('annonces', $this->paginate());
}
// liste_annonces.ctp
parcourir la liste 'annonces'
//home.ctp
<?php echo $this->Html->link('Liste des annonces',
array('subdomain' => 'nice','controller'=>'annonces','action'=>'liste_annonces')
);
//routes.php
App::uses('SubdomainRoute', 'Routing/Route');
Router::connect('/annonces/liste_annonces',
array('controller' => 'annonces', 'action' => 'liste_annonces'),
array('routeClass' => 'SubdomainRoute','pass'=>array('ville'))
);
//SubdomainRoute.php
<?php
App::uses('CakeRoute', 'Routing/Route');
class SubdomainRoute extends CakeRoute {
public function match ($params) {
$subdomain = isset($params['subdomain']) ? $params['subdomain'] : null;
unset($params['subdomain']);
$path = parent::match($params);
if ($subdomain) {
$path = 'http://' . $subdomain . '.localhost' . $path;
}
return $path;
}
}
Bonsoir.
Si tu veux que le router match l'url /annonce/liste_annonces
, il te faut mettre dans le Router::connect /annonce/liste_annonces
et non /annonces/liste_annonces
.
Au passage, si tu veux qu'il puisse prendre l'argument passé (ville) dans le cas où il soit présent dans l'url, fais comme ceci : /annonce/liste_annonces/*
.
Bonjour,
j'ai corrigé les erreurs il me donne URL que je veux mais la Page Web inaccessible
je crois que j'ai oublié quelque chose :(
non mais je souhaite qu'il soit dynamique car j'ai + de 1000 villes
y a-t-il une solution ??
Tt marche bien le seul probléme c'est comment acceder au subdomain et l'utiliser comme param dans la fonction
<?php echo $this->Html->link('Liste des annonces',
array('subdomain' => 'nice','controller'=>'annonces','action'=>'liste_annonces')
);
public function liste_annonces(){
$this->paginate['Annonce']['limit'] = 4;
$this->paginate['Annonce']['conditions'] = array(
//'subdomain' => 'nice'
'Annonce.ville LIKE' => ' param subdomain (nice)'
);
$this->set('annonces', $this->paginate());
}
Merciiii bcp Lartak ^^