2009-07-09 8 views
1

Je travaille sur un système de sondage pour mon entreprise et je l'ai installé dans le système afin qu'il y ait deux façons de répondre à l'enquête.CodeIgniter: Diriger vers des fonctions avec un segment d'URL

1) Enquête sur Taker informations non avant

2) Le sondage a été déjà envoyé et une session a été créée.

Dans le cas où celui que je voudrais que mon URL pour ressembler à:
mydomain.com/SurveySystem/index.php/survey/$surveyID~~V~~3rd

(surveyID $ étant un nombre entier de l'enquête à prendre)

Le deuxième cas serait où nous créons un lien avec pour le preneur de test. Je voudrais l'URL pour ressembler à ceci:
mydomain.com/SurveySystem/index.php/survey/$surveySessionID/$guestID

Dans ma classe d'enquête, je l'ai configuré comme ce qui suit:

fonction index() {

$segments = $this->uri->total_segments(); 

if($segments == 1){ 
    echo "no surveyID set"; 
    return; 
} 

if($segments == 2){ 
    $this->take_survey($this->uri->segment(2)); 
} 

if($segments == 3){ 
    $this->survey_session($this->uri->segment(3), $this->uri->segment(4)); 
} 

}

Si aucune information est transmise plus il echos très bien. Mais si j'essaie de mettre un entier où le surveyID est, il pense que je charge une méthode dans le contrôleur.

Merci pour votre aide!

Répondre

7

Utilisez URI routing pour remplacer le mappage contrôleur/fonction/arguments par défaut.

Exemple: dans votre application/config/routes.php:

$route['survey/:num'] = "survey/take_suvey"; 

Bonus: Vous pouvez également supprimer la partie index.php/, voir Removing the index.php file.

+0

Merci pour la réponse! C'est exactement ce que c'était. J'ai essayé de supprimer l'index.php mais quand je place .htaccess au niveau du projet et ajouter: RewriteEngine sur RewriteCond $ 1!^(Index \ .php | images | robots \ .txt) RewriteRule^(. * $ /index.php/$1 [L] Je reçois toujours une erreur apache: -/ – whobutsb

+0

Cela signifie que le module de réécriture n'est pas installé ou que la réécriture n'est pas autorisée. Si vous n'en avez pas le contrôle, vous pouvez utiliser la méthode ErrorDocument: ErrorDocument 404 my_rewriter.php, dans laquelle vous envoyez le code d'état 200 (OK), puis incluez index.php. Ensuite, assurez-vous qu'il renvoie toujours le statut 404 pour les pages vraiment inexistantes. –

2

Ma question est, avec une URL que hostile, pourquoi vous vous souciez à quoi il ressemble du tout? Ce n'est pas sémantique du point de vue de l'utilisateur. Oui, vous devriez supprimer l'index.php. Le couplage de la ré-écriture d'URL, la chose devrait être réduit de:

mydomain.com/SurveySystem/index.php/survey/????

à

mydomain.com/survey/

Et vos méthodes de classe de CI peuvent être réduits à "prendre" ou "soumettre" et un "examen" ultérieur.

Les sessions doivent être gérées à l'aide de cookies ou de la classe de session de CI. Si vous devez suivre l'état dans l'URI, combinez votre "session" spécifique au sondage et le "guestID" dans un segment avec le codage base64. Enfin, en utilisant un itinéraire comme suggéré, votre application n'aura aucun moyen de savoir quel identifiant d'enquête charger.Il aurait besoin de capturer le « : num » et le nourrir à take_survey:

$route['survey/(:num)'] = "survey/take_survey/$1";

Si vous prenez Ids numériques comme le premier segment après/enquête, vous avez besoin d'une autre voie placé après que l'un pour traiter le cas où ce segment est un identifiant de session:

$route['survey/(:num)/(:num)'] = "survey/session_manager/$1/$2";

lorsque le 1 et 2 $ sont ID de session et ID Invité respectivement. Personnellement, je dirais que c'est une mauvaise forme. La signification sémantique de vos segments se décompose: il devient difficile de déterminer ce que signifie ce premier segment numérique (est-ce un identifiant d'enquête ou un ID de session), à moins que vous ne puissiez toujours garantir que ces itinéraires sont en place.

Questions connexes