Bonjour,
J'ai un problème dans mes routes, qui ne devrait pas être un problème ...
voilà mon controller :

class Welcome extend CI_Controller{
    public function category()
    {
        $c = $this->uri->segment(2);
        $allowed_cat = $this->category_model->getAll();
        $exist = false;
        foreach($allowed_cat as $cat)
        {
            if($c == $cat->name)
            {
                $exist = true;
            }
        }
        if($exist)
        {
            echo "Cette catégorie existe ! ";
        }
        else
        {
            echo "elle existe PAS";
        }
    }
}

Et voilà mon fichier route :

$route'default_controller'] = "welcome";
$route'404_override'] = '';
$route'(:any)/(:any)'] = 'welcome/produit/$1/$2'; // url sous la forme http://site.com/voiture/honda-truc-machin-chose
$route'test'] = 'welcome/test';
$route'search'] = "welcome/search/";
$route'category/(:any)'] = 'welcome/category/$1';

Je voudrais transformer les url comme "http://site.com/welcome/category/voiture" en "http://site.com/category/voiture" ...
Donc je pense que mes routes sont bonnes, pourtant j'ai une erreur 404 ... une idée ?

EDIT :
J'ai un conflit entre deux routes (3ème et 6ème)

4 réponses


Benjamin Derepas
Auteur
Réponse acceptée

Oui, j'ai résolu mon problème en passant par des pattern

Benjamin Derepas
Auteur
Réponse acceptée

Voici mes routes :

$route'category/(:any)'] = "welcome/category/$1";
$route'([a-z0-9-]+$)'] = "welcome/produit/$1";

J'accède donc à un produit sous la forme www.site.fr/slug-de-mon-produit
J'accède donc à une catégorie sous la forme www.site.fr/voiture/

Je connais pas CI mais je vais émettre une supposition.

Tu as deux routes qui sont en conflit, la 3 et la 6, comme tu l'as dit.
En mettant $route'(:any)/(:any)'], je suppose que "any" veut dire n'importe quoi, or le mot "category" fait partie de ce n'importe quoi.

En tapant category/voiture dans ton url, tu iras sur la première route, qui va te rediriger vers welcome/produit/category/voiture

Et si "welcome" est ton controlleur, alors "produit" devrait être ta méthode. Et je ne vois qu'une méthode category() dans le code que tu nous as laissé

Pas de méthode trouvé = 404

Tu peux poster la solution ici si qqun à le même problème stp ?