web-dev-qa-db-fra.com

Codeigniter: Passer des données du contrôleur pour les afficher

Je souhaite passer $data du contrôleur nommé poll au results_view, mais je reçois une erreur de variable non définie. 

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Poll extends CI_Controller {

    public function __construct()
       {
            parent::__construct();
            $this->load->database();
            $this->load->helper('form');
       }

    public function index()
    {

        $this->load->view('poll_view',$data);
    }

    public function vote()
    {
        echo "Voting Successfull";
        $this->db->insert('votes',$_POST);
    }

    public function results()
    {
        echo "These are the results";
        //$query = $this->db->get('votes');
        $data = "hello";
        $this->load->view('results_view', $data);

    }
}

Results_view.php

<html>
<?php echo $data; ?>
</html>
30
Andrew Lynch

$data devrait être un tableau ou un objet: http://codeigniter.com/user_guide/general/views.html

$data = array(
    'title' => 'My Title',
    'heading' => 'My Heading',
    'message' => 'My Message'
);

$this->load->view('results_view', $data);

results_view.php

<html>
<?php 
//Access them like so
echo $title.$heading.$message; ?>
</html>
43
Lawrence Cherone

En termes simples, 

$ data ['a'] dans le contrôleur devient $ a dans votre vue. ($ data n'existera pas dans votre vue, seul l'index sera disponible)

par exemple.

Controller:    
$data['hello']='hellow world';

view:
echo $hello;
13
itachi

La vue n'appellerait pas les données 'données' 

Le contrôleur inclurait un index associatif (ne sachant pas si la nomenclature est correcte) pour les données, par exemple, 'trucs' ressemblant ainsi $data['stuff']

echo dans la vue: echo $stuff; pas echo $data;

Je suis un fiddler de code très humble mais j'aime beaucoup CodeIgniter, alors excusez-moi si j'ai ce cul de mésange. 

Une dernière chose: votre fonction constructeur est sûrement un gaspillage. Tout ce chargement des bibliothèques et des helpers se fait avec le fichier autoload.

6
Tom

Vous avez juste besoin de créer un tableau, vous utilisez Codeigniter, non?

Exemple sur le contrôleur:

$data['hello'] = "Hello, world";
$this->load->view('results_view', $data);

Dans la page "results_view", il vous suffit de:

<?php echo $hello;?>

Obs: Vous pouvez créer n données, faites attention au nom et faites-en un tableau.

Obs²: Pour utiliser les données, utilisez la clé du tableau avec un écho.

5
Space

vous pouvez le faire de cette façon

tableau défini dans controller

$data['hello'] = "hello";

et passer variable à view

echo $hello; 
1
noushad mohammed

Dans le contrôleur:

$data["result"] = $this->login_model->get_login(); // Get array value from DB..

$this->load->view('login-form',$data); // Pass the array to view 

En vue:

print_r($result);  // print the array in view file
1
kulandai yesu

Ok, je l'ai finalement résolu. Vous devriez vraiment avoir un modèle (ça aide beaucoup)

Dans ton modèle, fais quelque chose comme 

Modèle

class poll_model extends CI_MODEL {

 function __construct() {
   $this-load->database(); 
 }

 function get_poll {
   $this->db->query("SELECT * FROM table");
   $row = $query->row();

   $obj = array(
    'id' => $row->id
  );
   return $obj;
 }
}

Maintenant, si vous avez plus qu'un identifiant, dites le nom du poll #, vous pouvez ajouter un tableau. Maintenant dans votre contrôleur do 

class Poll extends CI_Controller {

public function __construct()
   {
        parent::__construct();
        $this->load->database();
        $this->load->helper('form');
        $this->load->model('poll_model');
   }

public function index()
{
    $data["a"] = $this->poll_model->get_poll();
    $this->load->view('poll_view',$data);
}

Et enfin dansVOIRput 

<? echo $a["id"]; ?>

C'est une grande aide. Je l'ai compris en testant et cela fonctionne pour moi. 

Dans votre contrôleur, vous pouvez passer

$data['poll'] = "Your results";

À votre avis, vous pouvez appeler

echo $poll; 
1
VEER

Dans le contrôleur:

produit de fonction publique () {

$data = array("title" => "Books", "status"=>"Read","author":"arshad","company":"3esofttech",

"sujet": "informatique"); 

Données du modèle au contrôleur

$this->load->model('bookModel');
$result = $this->bookModel->getMoreDetailsOfBook();

**Add *$result* from model to *$data* array**  
$data['tableRows'] = $result;

$ data from Controller to View

$this->load->view('admin/head',$data);

Et pour accéder au fichier view Views/user.php

<?php  echo $data;
 foreach($tableRows as $row){ echo
 $row['startData']; } ?>
0
Arshad Syed

Au lieu de 

$data = "hello";
$this->load->view('results_view', $data);

Faire 

$data['hello'] = 'hello';
$this->load->view('results_view', $data);

Dans votre fichier de contrôleur, le contrôleur enverra data having hello as string à results_view. 

echo $hello;
0
Ali Haider

J'ai vu tous les réponses ci-dessus, donc voici ce que je fais quand je dois charger les données du contrôleur à ma vue. Pour transmettre les données à la vue du contrôleur:

public function your_controller(){

   // Your Necessary Code 
   // You have the $data, $data2, $data3 to post to the view.

   $this->load->view('your_view_directory or view_page',['data'=>$data, 'data2'=>$data2, 'data3'=>$data3... so on ]);

}

Et du côté de la vue, vous pouvez simplement récupérer ces données: Pour afficher Vous pouvez simplement utiliser echo, print, print_r. Et si vous voulez en profiter, vous pouvez également le faire. 

0
ankit suthar