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 ^^