2012-06-17 4 views
2

Je construis un tutorialsystem avec CodeIgniter et souhaite atteindre la structure d'URL suivante:le passage de paramètres Codeigniter à l'index du contrôleur

  • /tutoriels -> une page d'introduction avec la liste de toutes les catégories
  • /tutorials/{une catégorie comme chaîne} -> ceci donnera une liste de tutoriels pour la catégorie donnée, par ex./tutorials/php
  • /tutorials/{une catégorie comme chaîne}/{un ID}/{tutorial slug} -> ceci montrera le tutoriel, par ex./Tutorials/php/123/how-use-to-fonctions
  • /tutorials/ajouter -> page pour ajouter un nouveau tutoriel

Le problème est que quand je veux utiliser les deux premiers types de URL, je devrais passer des paramètres à la fonction d'index du contrôleur. Le premier paramètre est la catégorie optionnelle, le second est l'ID du tutoriel optionnel. J'ai fait quelques recherches avant de poster, donc j'ai découvert que je pouvais ajouter une route comme tutorials/(:any), mais le problème est que cette route passerait aussi add comme paramètre lors de l'utilisation de la dernière URL (/ tutorials/add).

Des idées comment je peux y arriver?

Répondre

13

Vos règles de routage peuvent être dans cet ordre:

$route['tutorials/add'] = "tutorials/add"; //assuming you have an add() method 
$route['tutorials/(:any)'] = "tutorials/index"; //this will comply with anything which is not tutorials/add 

Ensuite, dans votre méthode l'index() contrôleur, vous devriez être en mesure de travailler, que ce soit la catégorie ou ID tutoriel est passé!

+1

Beaucoup plus facile que le mien, merci! J'ai encore un peu à apprendre. – EsTeGe

+0

cela a un problème à des fins de référencement. –

3

Quelques minutes après la publication, je pense avoir trouvé une solution possible pour cela. (Honte sur moi).

Dans le code pseudo:

public function index($cat = FALSE, $id = FALSE) 
{ 
    if($cat !== FALSE) { 
     if($cat === 'add') { 
      $this->add(); 
     } else { 
      if($id !== FALSE) { 
       // Fetch the tutorial 
      } else { 
       // Fetch the tutorials for category $cat 
      } 
     } 
    } else { 
     // Show the overview 
    } 
} 

Commentaires pour cette solution est la bienvenue!

+0

Il existe des façons plus simples de réaliser cela dans Codeigniter. Regardez Aidas répondre, cela devrait le faire. –

+0

En effet, je suis toujours coincé dans la façon de travailler à l'ancienne: – EsTeGe

9

Je pense qu'un remappage doit être plus utile à votre problème au cas où vous voudriez ajouter plus de méthodes à votre contrôleur, pas simplement 'ajouter'. Cela devrait faire la tâche:

function _remap($method) 
{ 
    if (method_exists($this, $method)) 
    { 
    $this->$method(); 
    } 
    else { 
    $this->index($method); 
    } 
} 
Questions connexes