CodeIgniter: Bir URL bölümü ile işlevlerine Yönetmenlik

2 Cevap php

Ben şirket için bir anket sistemi üzerinde çalışıyorum ve ankete katılmak için iki yol vardır ki ben bunu sisteme kurulum var.

1) Yeni Anket Taker önceden hiçbir bilgisi

2) Anket zaten gönderildi ve bir oturum oluşturuldu.

In case one I would like my URL to look like:
mydomain.com/SurveySystem/index.php/survey/$surveyID

($ SurveyID almak için anket bir tamsayı olmak)

The second case would where we create a link with for the test taker. I would like the URL to look like this:
mydomain.com/SurveySystem/index.php/survey/$surveySessionID/$guestID

Benim Anket sınıfında ben aşağıdaki gibi kurulum var:

fonksiyon indeksi () {

$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));
}

}

When no information is passed the it echos just fine. But if I try to put a integer where the surveyID is it thinks i'm loading up a method in the controller.

Yardım için teşekkür ederiz!

2 Cevap

URI routing varsayılan denetleyici / fonksiyon / argümanlar haritalama geçersiz kılmak için kullanın.

Example: tüm application/config/routes.php:

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

Bonus: Ayrıca, index.php/ parçası kaldırmak bakın Removing the index.php file.

Benim soru düşmanca, neden bunu hiç benzediğini umurunda bir URL ile, nedir? Bir kullanıcı açısından semantik değildir. Evet, index.php kaldırarak edilmelidir. URL yeniden birleştirilmesi, her şey azaltılmalıdır:

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

karşı

mydomain.com/survey/

And your CI class methods can be reduced karşı "take," or "submit," and a subsequent "review."

Sessions should be managed using cookies or CI's session class. If you need karşı track state in the URI, combine your survey-specific "session" and the "guestID" inkarşı one segment with base64 encoding.

Lastly, using a route as suggested, there will be no way for your app karşı know what survey ID karşı load. It would need karşı capture the ":num" and feed it karşı take_survey:

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

If you take numeric ids as the first segment after /survey, you need another route placed after that one karşı handle the case where that segment is a session ID:

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

Where the $1 and $2 are session ID and Guest ID respectively. Personally, I would say this is bad form. The semantic meaning of your segments break down: it becomes difficult karşı determine what that first numeric segment means (is it a survey ID or session ID), unless you can always guarantee that these routes are in place.