2014-03-31 16 views
8

Entschuldigen Sie die Mühe, aber ich hatte gehofft, jemand könnte mir mit einem ziemlich banalen Problem helfen, das ich innerhalb CI habe. Ich bin in der Lage eine Variable über die URL mit CI Beispielen zB an:Weitergabe mehrerer Variablen in URL mit codeigniter

ich die Variable 24, ohne ein Problem geschickt bekommen kann
http://localhost/project/main/getproduct/24 

im getProduct() -Methode meines Haupt-Controller.

aber ich möchte jetzt zwei Variablen über die URL übergeben, aber ich habe keine Ahnung, wie dies zu tun ist oder ob CodeIgniter mir dies erlauben wird. könnte mir jemand bitte zeigen, wie zwei Variablen in CI passieren und eine Methode, die sie habe ich versuchte abrufen kann:

http://localhost/project/main/getproduct/24/45 

und dann in meiner getProduct Methode:

public function getproduct($productID, $factoryID){ 
    ..... 
} 

aber ich finde meine Methode kann die erste Variable ohne ein Problem, aber nicht die zweite Variable abrufen. Könnte mir bitte jemand in die richtige Richtung zeigen? Vielen Dank im Voraus.

+0

Wie sieht Ihre "getproduct" -Methode aus? – Kryten

Antwort

12

können Sie uri verwenden, um Werte

Hier in Ihrer URL abzurufen ist ein Beispiel

public function getproduct() 
{ 
    $productID = $this->uri->segment(3); 
    $factoryID = $this->uri->segment(4); 
    // ProductID will be 25 
    // Factory ID will be 45 
} 

Dann können Sie einfach die Werte verwenden, wie Sie

+0

danke, was für eine Stelle auf der Suche nach erstklassigen upvotes für Sie! – TotalNewbie

+0

Ich stimme nicht zu, dass dies der richtige Weg ist. Sie sollten die Variablen nicht so lesen. CodeIgniter hat eine spezielle Möglichkeit, um diese Daten zu erhalten, ohne dass zwei zusätzliche Codezeilen erforderlich sind. Siehe Antwort unter http://StackOverflow.com/A/22774721/1084306 – Donovan

+0

sichere mich viele Male, danke – dadan

6

Sie müssen eine Route in der Datei config/routes.php festlegen, um die Elemente zu analysieren.

Es sieht aus wie:

$route["getproduct/(:any)/(:num)"]="main/changequestion/$1/$2" 

Dann hoffe ich, es wird funktionieren.

+1

Wie würde ich dann die Variablen in der Methode abrufen? – TotalNewbie

+0

Das habe ich noch nie gemacht - es hat immer nur für mich funktioniert. – Kryten

+0

Versuchen Sie Folgendes: http://ellislab.com/codeigniter/user-guide/general/controllers.html. Übergeben von URI-Segmenten an Ihre Funktionen. Ich hoffe es hilft . Ich denke, wenn Sie mehr als 1 Parameter verwenden, wenn URI-Routing aktiv ist, können Sie sie nur mit uri-> Segment erhalten. Sie mit Uri-Segment zu bekommen Es ist im Grunde das Gleiche. – Alex7

18

Die akzeptierte Antwort bitte für diese Arbeit besonderes Problem, wird aber nicht funktionieren, wenn sich die URL jemals ändert. Um auf mehrere Variablen in Ihrem Controller zuzugreifen, fügen Sie einfach zur Funktionsdefinition hinzu.

http://localhost/project/main/getproduct/24/45

class Main extends CI_Controller { 

    public function getproduct($productID = 0, $factoryID = 0) 
    { 
     // ProductID will be 25 
     // Factory ID will be 45 
    } 
} 

Referenz: CodeIgniter User Guide

2

Wenn jemand anderes diese mit CI3 läuft in. In CodeIgniter 3 wird keine spezielle Route benötigt. Nicht sicher, ob es jetzt auch auf CI2 funktioniert.

Sie können diese URI Segmente zugreifen Parameter wie die Verwendung von:

http://localhost/project/main/getproduct/24/45

public function getproduct($productID, $factoryID){ 
    ..... 
} 
0

Weitergabe von URI-Segmenten an Ihre Methoden

Wenn Ihre URI mehr als zwei Segmente enthält, werden sie Ihrer Methode als Parameter übergeben.

Zum Beispiel, sagen wir mal Sie eine URI wie dieses:

example.com/index.php/products/shoes/sandals/123 

Ihre Methode Segmente URI weitergegeben werden 3 und 4 („Sandalen“ und „123“):

<?php 
class Products extends CI_Controller { 

     public function shoes($sandals, $id) 
     { 
       echo $sandals; 
       echo $id; 
     } 
} 

Wichtig !!! Wenn Sie die URI-Routing-Funktion verwenden, werden die an die Methode übergebenen Segmente umgeleitet.

Siehe diesen Link als offizieller Codeigniter Guide. Codeigniter Official Guide.

0

Lösung dieses Problems wird mit der _remap() Funktion. Sie müssen nur diese Funktion hinzufügen, bevor index() - Funktion

Ich hoffe, dies wird Ihr Problem lösen.