web-dev-qa-db-fra.com

Passage d'une variable du contrôleur à la vue dans CodeIgniter

Je suis nouveau dans Codeigniter et OOP PHP.

Manette:

public function index(){
    $this->load->model('main_model');
    $planet = $this->main_model->solar();
    $this->load->view('main_view', $planet);    
    }

Si echo $planet dans le contrôleur, il fait ce qu'il est censé faire. Si je echo $planet dans la vue, j'obtiens une erreur de variable non définie. $planet n'est pas un tableau. Pourquoi la variable $planet n'est-elle pas transmise à la vue?

Je sais que la question est simple et fondamentale et je suis gêné de ne pas pouvoir comprendre ce que je fais de mal.

EDIT: OK, après plus de bidouillage, je me suis mis au travail. Les variables ne peuvent-elles être transmises du contrôleur à la vue que lorsqu'elles sont formatées en tant que tableau?

15
user1616244

Vous devez passer un tableau à la vue. CodeIgniter met automatiquement $planet à votre disposition.

$data = array('planet' => $planet);
$this->load->view('main_view', $data);

Avec cela, vous pouvez utiliser $planet dans votre vue.

Par exemple, si vous procédez comme suit:

$data = array('foo' => 'Hello', 'bar' => 'world');
$this->load->view('main_view', $data);

$foo et $bar seront disponibles dans votre vue. Les paires clé-valeur du tableau sont automatiquement converties en variables dans la vue.

27
Mischa

Vous pouvez transmettre un tableau ou un objet à la vue. Vous pouvez ensuite accéder à la (aux) clé (s) du tableau en tant que variable (s) dans votre vue.

Manette

Tableau

public function index()
{
    $this->load->model('main_model');
    $planet_data['planet'] = $this->main_model->solar();
    $this->load->view('main_view', $planet_data);
}

Objet

public function index()
{
    $this->load->model('main_model');
    $planet_data = new stdClass(); //Creates a new empty object
    $planet_data->planet = $this->main_model->solar();
    $this->load->view('main_view', $planet_data);
}

Extrait de Manuel de l'utilisateur de CodeIgniter : Remarque: si vous utilisez un objet, les variables de classe seront transformées en éléments de tableau.

Vue

Quel que soit le mode de transmission des données, celles-ci peuvent être affichées comme suit:

<?php echo $planet; ?>

Si c'est un tableau, vous devrez parcourir le tableau. Ou un objet, puis accédez à ses variables membres.


D'après mon expérience, utiliser un tableau est plus courant que d'utiliser un objet.

12
jleft

c'est comment le faire facilement

public function index() {
    $this->load->model('main_model');
    $data['planet'] = $this->main_model->solar();
    $this->load->view('main_view', $data);    
}

Maintenant, à votre avis, vous pouvez accéder à la valeur de cette façon

echo $planet;
6
walecloud

Essayez comme:

public function index(){
    $this->load->model('main_model');
    $data['planet'] = $this->main_model->solar();
    $this->load->view('main_view', $data);    
}

et à votre vue, vous pouvez accéder à "$ planet".

1
Gautam3164

vous pouvez passer une variable dans l'URL à

function regresion($value) {

    $data['value'] = $value;
    $this -> load -> view('cms/template', $data);
}

Dans la vue

<?php print_r($value);?>

En vue, nous passons tableau et la clé de tableau deviendra automatiquement variable et sera mise à votre disposition par codeigniter, nous ne pouvons pas simplement passer des variables à la vue, nous devons passer tableau

Voici votre code

public function index(){
  $this->load->model('main_model');
  $planet = $this->main_model->solar(); // <--- Change this line 
  $this->load->view('main_view', $planet);    
}

changez-le simplement en 

public function index(){
  $this->load->model('main_model');
  $data['planet']= $this->main_model->solar(); // <--- to this
  $this->load->view('main_view', $data);    
}

et à votre avis, vous pouvez y accéder simplement comme ceci

echo $planet;
0
Ali Haider

Si modal contient la réponse du tableau:

public function solar() {
   $data['earth'] = 'Earth';
   $data['venus'] = 'Venus';
   return $data;
}

alors vous les données à afficher comme ceci:

public function index(){
    $this->load->model('main_model');
    $planet = $this->main_model->solar();
    $this->load->view('main_view', $planet);    
}

Mais à la vue, vous aurez des données d'accès comme ceci:

echo $earth;
echo $venus;

si vous ne savez pas que vous voulez une réponse, utilisez un code comme celui-ci:

public function index(){
    $this->load->model('main_model');
    $planet['planet'] = $this->main_model->solar();
    $this->load->view('main_view', $planet);    
}

et dans le fichier de vue, vous pouvez accéder aux données comme ceci:

print_r($planet);

Si vous ne savez pas quelles données seront visibles, utilisez simplement ce code:

print_r($this->_ci_cached_vars);
0
Gaurav