Comment passer des paramètres dans la fonction d'index dans codeigniter
voici un exemple d'url:
http://www.example.com/search/search-keyword
Je suis en train de faire ce travail, j'ai enlevé le index.php à l'aide de .htaccess, la recherche est le contrôleur et je veux passer un paramètre dans la méthode de l'indice.
présentement, c'est à quoi il ressemble:
class Search extends CI_Controller{
function index($param){
echo $param;
}
}
des suggestions? Je n'arrive pas à le faire fonctionner
source d'informationauteur user691983
Vous devez vous connecter pour publier un commentaire.
index
segmenthttp://www.mysite.com/search/index/search-keyword
.$route['search/(:any)'] = 'search/index/$1';
Rappelez-vous de ne pas faire confiance à la saisie de l'utilisateur, en particulier lorsque vous êtes à la jeter dans votre url. La dernière version de CI prend en charge
$_GET
variables maintenant, de sorte que vous pouvez regarder dans l'aide de qui ou flashdata. Un searh terme aussi simple queO' Brien
vous donnera une erreur fatale ("L'URI que vous avez soumis a des caractères non autorisés.").Vous devriez alors être en mesure d'accéder à cette: /recherche/123123 :et la page de l'écho de "123123" ou tout ce que vous avez mis en place.
Essayez-le et dites-nous comment ça s'est passé.
La plupart de ces solutions ne fonctionne que si vous avez seulement une fonction unique appelée
index()
dans votre contrôleur. Si vous avez cela dans vos itinéraires:Avec le dessus de vos voies, ce qui va arriver, c'est que votre fonction de recherche travail, mais alors si vous ajouter d'autres fonctions à un même contrôleur ils vont tous être redirigé vers
/search/index/$1
.La seule solution je pense, qui vous permet d'utiliser l'URL que vous souhaitez tout en étant en mesure d'ajouter d'autres fonctions à votre recherche contrôleur est d'ajouter une sorte de désordre conditionnelle pour votre fichier de routes. Voici à quoi il ressemble et ce qu'il fait:
$request = $_SERVER['REQUEST_URI']; //Only add this for readability
if(!strpos($request, 'search/another_function') || !strpos($request, 'search/more_functions')) {
$route['search/(:any)'] = 'search/index/$1';
}
Ce que cela est fait, c'est essentiellement en disant: "si l'URL demandée ne pas contenir le nom d'un de mes recherches dans les fonctions de contrôleur, alors il doit être destiné à l'index, donc nous allons activer la voie de la règle" pour l'index.
Cela vous permettra de prendre les demandes de
search/any_other_functions_you_have
sans problème et seulement activer la règle pour cacher l'indice de la fonction lorsque l'URI de la requête ne correspond pas à l'un d'eux.Un effet secondaire de ceci est que vous n'aurez jamais une erreur 404. Par exemple, si quelqu'un entre dans une URL de la forme "yourdomain.com/search/something" et ils s'attendent à montrer un non-résultat de la recherche page, ils ne seront pas une 404 de les alerter sur le fait qu'il n'existe pas la page comme ça, et l'application va assumer ce qu'ils ont tapé est un terme de recherche. Cependant, il semble que ce n'est pas vraiment un problème pour vous et je ne le vois pas être une telle chose terrible pour un contrôleur de unabe de retourner une erreur 404.
Vous avez besoin de comprendre la façon dont le code de l'allumeur url de travail, de son fond comme ceci:
http://www.mysite.com/{controller}/{fonction}
Jusqu'à ce que votre url est actuellement à la recherche d'une fonction appelée "mot clé" dans votre recherche de contrôleur.
Vous avez plusieurs options. Le plus simple sera de simplement modifier l'url:
http://www.mysite.com/search/result/keyword
Alors cela devrait fonctionner parfaitement:
Si vous voulez vraiment utiliser l'url que vous avez eu, vous pouvez utiliser le même code que ci-dessus mais aussi d'ouvrir "application/config/routes.php" et d'ajouter ce vers le bas.
Alternativement, si vous souhaitez continuer à utiliser la fonction index, vous pouvez le changer à ce
Et de changer votre classe à quelque chose comme ceci:
N'oubliez pas de mettre à jour votre réponse si vous comprendre vous-même ou d'accepter quelqu'réponse si il répond 🙂
Je viens de commencer de CI et de là était la solution et mis en place sur mon site. Jusqu'à présent, il fonctionne pour moi et mes requêtes de recherche ont été indexées par google que les liens
C'est ma solution:
À partir de CI userGuide
J'ai donc créé mon contrôleur de cette façon:
J'espère que cela peut être utile à quelqu'un...
BUG: si vous appelez /raccourcisseur d'_remap fonction pass "index" à la fonction index ()...il peut être résolu en ajoutant une condition if ou quelque chose d'autre
Vous devez utiliser l'IC Classe URI. http://codeigniter.com/user_guide/libraries/uri.html
Cette façon la plus simple est tout simplement d'utiliser uri segments:
Ou comme Madmartigan dit, l'utilisation des routes, qui est probablement la meilleure façon de le faire.
J'ai eu également à vérifier si une variable a été adoptée ou non - voici donc la solution que j'ai pris.
Espère que cela aide quelqu'un!
J'ai finalement trouvé une solution car je ne peux pas simplement mettre des post variables dans l'URL.
Ce que j'ai fait était de créer une autre fonction, puis de les rediriger vers cette fonction.