web-dev-qa-db-fra.com

Passage de plusieurs variables dans une URL à l'aide de codeigniter

désolé de vous déranger mais j'espérais que quelqu'un pourrait m'aider avec un problème assez banal que je rencontrais au sein de CI. Je peux envoyer une variable via l'URL en utilisant des exemples de CI, par exemple:

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

dans la méthode getproduct () de mon contrôleur principal, je peux obtenir la variable envoyée 24, sans problème.

cependant, je souhaite maintenant transmettre deux variables via l'URL, mais je ne sais pas comment faire cela ni si CodeIgniter me le permet. Quelqu'un pourrait-il me montrer comment passer 2 variables dans CI et une méthode permettant de les récupérer? J'ai essayé:

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

puis dans ma méthode getproduct:

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

mais je trouve que ma méthode peut obtenir la première variable sans problème, mais pas la deuxième. Quelqu'un pourrait-il m'indiquer dans la bonne direction s'il vous plaît. Merci d'avance.

10
TotalNewbie

Vous pouvez utiliser uri pour récupérer des valeurs dans votre URL

Voici un exemple

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

Ensuite, vous pouvez simplement utiliser les valeurs à votre guise

20
Chitowns24

La réponse acceptée fonctionnera pour ce problème particulier, mais ne fonctionnera pas si l’URL change un jour. Pour accéder à plusieurs variables de votre contrôleur, ajoutez simplement à la définition de la fonction.

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
    }
}

Référence: Guide de l'utilisateur CodeIgniter

23
Donovan

Vous devez définir un itinéraire dans config/routes.php pour analyser les éléments.

Ça ressemble à: 

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

Alors j'espère que ça va marcher.

8
Alex7

Si quelqu'un d'autre se heurte à cela avec CI3. Dans CodeIgniter 3, aucun itinéraire spécial n’est nécessaire. Pas sûr si cela fonctionne aussi sur CI2 maintenant.

Vous pouvez accéder à ces segments d'URI en utilisant des paramètres comme celui-ci:

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

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

Passer des segments d'URI à vos méthodes

Si votre URI contient plus de deux segments, ils seront transmis à votre méthode en tant que paramètres.

Par exemple, disons que vous avez un URI comme celui-ci:

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

Votre méthode sera transmise aux segments 3 et 4 de l’URI («sandales» et «123»):

<?php
class Products extends CI_Controller {

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

Important !!! Si vous utilisez la fonctionnalité de routage URI, les segments transmis à votre méthode seront ceux qui sont redirigés.

Référez-vous à ce lien en tant que Guide officiel de Codeigniter. Codeigniter Guide officiel.

0
Mohammad Naim Dahee

http://example.com/project/main/getproduct/24/45

Pour obtenir «45», vous pouvez faire ceci:

 $id1 =  $this->uri->segment(3);
 echo $id1; //output is 45
0
Faisal

La solution de ce problème utilise de _remap () une fonction. Vous devez juste ajouter cette fonction avant la fonction index ()

function _remap($method, $args)
{

       if (method_exists($this, $method))
       {
           $this->$method($args);
       }
       else
       {
            $this->Index($method, $args);
       }
}

J'espère que cela résoudra votre problème. 

0
Usama Khalid