web-dev-qa-db-fra.com

Comment passer des données avec une redirection dans codeigniter

Dans mon contrôleur, j'ai utilisé cette façon. Je veux passer une donnée variable à ma fonction d'index du contrôleur par le biais de la redirection

$in=1;
redirect(base_url()."home/index/".$in);

et ma fonction d'index est

function index($in)
{
    if($in==1)
    {

    }
}

Mais je reçois des erreurs comme des variables non définies.
Comment puis-je résoudre ça?

10
robins

Donc, dans le contrôleur, vous pouvez avoir une fonction:

$in=1;
redirect(base_url()."home/index/".$in);

Et dans la fonction cible, vous pouvez accéder à la valeur $ in comme ceci: 

$in = $this->uri->segment(3);   
if(!is_numeric($in))
{
  redirect();       
}else{
   if($in == 1){

   }
}

Je mets segment (3) car sur votre exemple, $ in est après 2 tirets. Mais si vous avez par exemple cette structure de liens:www.mydomain.com/subdomain/home/index/$invous devrez utiliser segment (4) .

J'espère que cela pourra aider.

6
Arizona2014

Utilisez session pour transmettre des données lors de la redirection. Il existe une méthode spéciale dans CodeIgniter appelée "set_flashdata"

$this->session->set_flashdata('in',1);
redirect("home/index");

Maintenant vous pouvez obtenir in au contrôleur d’index comme

function index()
{
 $in = $this->session->flashdata('in');
 if($in==1)
  {

  }
}

Rappelez-vous que ces données seront disponibles uniquement pour la redirection et perdues lors de la demande de page suivante. Si vous avez besoin de données stables, vous pouvez utiliser une URL avec le paramètre & GET $this->input->get('param1').

18
Rejoanul Alam

Si vous voulez compliquer les choses, voici comment: 

Sur votreroutes.phpfichier sous application/config/routes.php, insérez le code:

$route['home/index/(:any)'] = 'My_Controller/index/$1'; 

Ensuite, sur votre contrôleur [My_Controller], faites: 

function index($in){
  if($in==1)
  {
     ...
  }
}

Enfin, transmettez n'importe quelle valeur avec une redirection:

$in=1;
redirect(base_url()."home/index/".$in);

Continuez votre bon travail!

0
Eunil Gadiana

Utilisez session pour transmettre des données lors de la redirection. Il y a deux étapes 

Étape 1 (fonction post): 

  $id = $_POST['id']; 
  $this->session->set_flashdata('data_name', $id);
  redirect('login/form', 'refresh');

Etape 2 (fonction de redirection):

  $id_value = $this->session->flashdata('data_name');
0
Faridul Khan

Plus d'informations seraient très utiles, car cela devrait fonctionner.

Choses que vous pouvez vérifier:

  • Votre contrôleur s'appelle-t-il home.php? Aller à redirect(base_url()."home"); affiche votre page d'accueil?
  • Rendez votre fonction d'index publique.

    public function index($in) {
         ....
    }
    
0
Marc Compte