2016-07-14 9 views
1

Wie soll ich mein Modell in meinen Controller einfügen, um die Werte in Dropdown anzuzeigen? Der Fehler, den ich bekomme: Ungültige Argument für foreach() Ich habe kein Framework verwendet. Nur natives PHP. Ich bin neu in MVC und PHP bitte helfen!php mvc Daten in der Dropdown-Liste Datenbankanzeige abrufen

Mein Controller:

<?php 
    class Index extends Controller { 
    function __construct(){ 
     parent::__construct(); 
    } 
    function index(){ 
     $landArray = $this->model->fetchData(); 
     $this->view->render('index/index'); 
     var_dump($landArray); // display all row in database 
    } 
} 

Modell:

<?php 
class Index_Model extends Model { 
function __construct(){ 
    parent::__construct(); 
    } 
function fetchData(){ 
    $selectIsland = $this->connection->prepare("SELECT island_id, island 
           from island"); 
    $selectIsland->setFetchMode(PDO::FETCH_ASSOC); 
    $selectIsland->execute(); 
    $islandResult = $selectIsland->fetchAll(); 
    return $islandResult; 

} 
} 

Ausblick:

<select> 
    <option value="">--- Select Island---</option> 
     <?php 
      foreach($islandResult as $row){ 
       echo '<option value="'.$row['island_id'].'">'.$row['island'].'</option>'; 
      endforeach 
     }?> 
</select> 

Dies ist meine Bibliothek anzeigen und Render-Methode.

<?php 
class View { 
function __construct(){ 
    } 
public function render($name, $noInclude = false, $landArray){ 
if($noInclude == true){ 
    require 'views/'.$name.'.php'; 
    }else{ 
    require 'views/header.php'; 
    require 'views/'.$name.'.php'; 
    require 'views/foother.php'; 
} 
} 
} 
} 
+0

verwenden Sie ein Framework? oder folgende mvc mit rohen php? –

+0

Hallo Ich habe vergessen, in meine Frage aufzunehmen, ich habe kein Framework nur PHP verwendet, leider bin ich neu in PHP und MVC Ansatz. – Royce

+0

wie funktioniert das '$ this-> view-> render()' ?? hast du es umgesetzt? –

Antwort

0

Sie haben nie fetchData() Methode Ihres Modells aufgerufen. Im MVC-Controller steuert alles. In Ihrem Controller müssen Sie Methoden vom Modell aufrufen. Übergeben Sie diese dann an Ihre Ansichtsdatei.

<?php 
    class Index extends Controller { 
    function __construct(){ 
     parent::__construct(); 
    } 
    function index(){ 
     $landArray = $this->model->fetchData(); 
     $this->view->render('index/index', false, array('islandResult' => $landArray)); // as we are sending param to view and render accept that as 3rd param so we need to specify the 2nd param too! 
    } 
} 
Model: 

<?php 
class Index_Model extends Model { 
function __construct(){ 
    parent::__construct(); 
    } 
function fetchData(){ 
    $selectIsland = $this->connection->prepare("SELECT island_id, island 
           from island"); 
    $selectIsland->execute(); 
    $islandResult = $selectIsland->fetchAll(); 
    return $islandResult; //if you need something to pass to view from db first you have to pass it to controller from model 
} 
} 
View: 

<select> 
    <option value="">--- Select Island---</option> 
     <?php 
      foreach($islandResult as $row){ 
       echo '<option value="'.$row['island_id'].'">'.$row['island'].'</option>'; 
      } 
     ?> 
</select> 

View/Render Library Method: 

    class View { 
     function __construct(){ 
     } 
     public function render($name, $noInclude = false, $arrayParam = array()){ //look closely...here i've made 3rd parameter as default argument so that your other codes which don't need to send param to view works smoothly. 
      if(count($arrayParam) > 0){ 
       extract($arrayParam); 
      } 
      if($noInclude == true){ 
       require 'views/'.$name.'.php'; 
      }else{ 
       require 'views/header.php'; 
       require 'views/'.$name.'.php'; 
       require 'views/foother.php'; 
      } 
     } 
    } 

Jetzt können Sie Parameter in der Ansicht verwenden, die Sie vom Controller senden. Was immer Sie als Array-Schlüssel im Controller übergeben, kann jetzt als Variable in View verwendet werden.

N.B: Überprüfen Sie meine Kommentare aus dem Code.

+0

nur schreiben Methoden innerhalb des Modells bedeutet nicht, dass sie sich selbst nennen. Sie haben sie jederzeit von Ihrem Controller aus angerufen. Und wenn Sie etwas an Ihre Sicht übergeben müssen, müssen Sie als zweites Argument mit 'render()' umgehen. Ich nehme an, dass Ihre 'render()' Methode auch den zweiten Parameter verwendet. lass es mich wissen, wenn es für dich funktioniert. –

+0

Der Fehler, den ich bekomme, ist: Ungültiges Argument für foreach() angegeben. Eigentlich füge ich das Ende hinzu, das ich vergessen habe, es hinzuzufügen. Aber es ist wieder ein Fehler – Royce

+0

Können Sie ein Beispiel für MVC-Ansatz in nativen PHP geben, die Daten in der Datenbank abrufen, wird dann in Dropdown angezeigt. – Royce