webentwicklung-frage-antwort-db.com.de

Variable wird vom Controller an die Anzeige in CodeIgniter übergeben

Ich bin neu in Codeigniter und OOP PHP.

Regler:

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

Wenn echo $planet in der Steuerung ist, macht es das, was es tun soll. Wenn ich echo $planet in der Ansicht sehe, erhalte ich einen undefinierten Variablenfehler. $planet ist kein Array. Warum wird die Variable $planet nicht an die Ansicht übergeben?

Ich weiß, das ist eine einfache und grundlegende Frage und es ist mir peinlich, dass ich nicht herausfinden kann, was ich falsch mache.

EDIT: Okay, nachdem ich mich ein bisschen herumgetüftelt habe, habe ich es zum Laufen gebracht. Können Variablen nur von Controller an View übergeben werden, wenn sie als Array formatiert sind?

15
user1616244

Sie müssen ein Array an die Ansicht übergeben. CodeIgniter stellt Ihnen automatisch $planet zur Verfügung.

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

Damit können Sie $planet in Ihrer Ansicht verwenden.

Zum Beispiel, wenn Sie Folgendes tun:

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

$foo und $bar sind in Ihrer Ansicht verfügbar. Die Schlüssel-Wert-Paare im Array werden in der Ansicht automatisch in Variablen konvertiert.

27
Mischa

Sie können der Ansicht entweder ein Array oder ein Objekt übergeben. Sie können dann als Variable in Ihrer Ansicht auf die Array-Schlüssel zugreifen.

Regler

Array

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

Objekt

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

Aus CodeIgniters Benutzerhandbuch : Hinweis: Wenn Sie ein Objekt verwenden, werden die Klassenvariablen in Array-Elemente umgewandelt.

Aussicht

Unabhängig davon, wie Sie die Daten übergeben, können diese wie folgt angezeigt werden:

<?php echo $planet; ?>

Wenn es sich um ein Array handelt, müssten Sie es durchlaufen. Oder ein Objekt und dann auf seine Mitgliedsvariablen zugreifen.


Nach meiner Erfahrung ist die Verwendung eines Arrays häufiger als die Verwendung eines Objekts.

12
jleft

so geht das einfach

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

Jetzt können Sie aus Ihrer Sicht auf diesen Wert zugreifen

echo $planet;
6
walecloud

Versuchen Sie es wie:

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

und aus Ihrer Sicht können Sie auf "$ planet" zugreifen. Das ist es. Akzeptieren Sie die Antwort, wenn es nützlich ist

1
Gautam3164

sie können eine Variable in der URL an übergeben

function regresion($value) {

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

In der Ansicht

<?php print_r($value);?>

In view übergeben wir array und der Schlüssel von array wird automatisch variabel und wird Ihnen vom Codeigniter zur Verfügung gestellt. Wir können nicht einfach Variablen übergeben, um anzuzeigen, dass wir array übergeben müssen

Unten ist Ihr Code

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

Ändern Sie es einfach in 

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

und aus Ihrer Sicht können Sie einfach so darauf zugreifen

echo $planet;
0
Ali Haider

Wenn modal Array-Antwort enthält:

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

dann kannst du die daten so ansehen:

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

Bei der Anzeige haben Sie jedoch folgende Zugangsdaten:

echo $earth;
echo $venus;

wenn Sie nicht wissen, dass Sie eine Antwort erhalten möchten, verwenden Sie folgenden Code:

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

und in View-Datei können Sie auf die Daten wie folgt zugreifen:

print_r($planet);

Wenn Sie nicht wissen, welche Daten angezeigt werden, verwenden Sie einfach diesen Code:

print_r($this->_ci_cached_vars);
0
Gaurav