Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Przypisanie wyniku funkcji modelu do zmiennej w view
Forum PHP.pl > Forum > Przedszkole
Tarvald
Witam,
Probuje zbudowac swoj wlasny mvc framework (w celu nauki mvc oraz oop). W modelu mam funkcje ktora zwraca tablic. Chciałbym tą tablice przenies do modelu aby juz w koncowym pliku view html zforeachowac ja i odpowiedni wyswietlic.
Chcialem skopiowac ja przez controller ale niestety to mi nie zadzialalo:

  1. <?php
  2.  
  3. class glowna extends Controller {
  4.  
  5. function __construct() {
  6. parent::__construct();
  7. $this->view->render('glowna');
  8. parent::loadModel('glowna');
  9.  
  10. }
  11.  
  12. public function wyswietl(){
  13. $this->view->kategorie = $this->model->pobierzKategorie();
  14. }
  15. }
  16. ?>
  17.  


Jak takie operacje wykonywać?
jezeli w funkcji wyswietl() dodalbym var_dump($this->view->kategorie) wygladałby na to że wszystko jest ok. Ale zmienna po opuszczeniu pliku (tak mysle) sie zeruje i juz w samym view jest null. Czy potrzebujecie jeszcze jakis kawalek kodu?
rh
return
Gość
Jest zrobione return w pobierzKategorie. Zwraca tablice.
Turson
A inne dane do widoku są poprawnie przesyłane? Jak nie, to widocznie nie ma komunikacji z widokiem
Tarvald
No właśnie. $this->view->render() odpala się poprawnie, ale przypisanie tablicy do zmiennej kategorie ktora zainicjalizowalem w view już nie idzie.
nospor
Z Twojego kawałka kodu nic nie wynika.... Nie wiemy czy WYSWIETL odpala sie przed RENDER czy moze po? Nie wiemy tak naprawde nic i błąd może byc na dobrą sprawe wszedzie
tzm
  1. class View {
  2. function render($file, $variables = array()) {
  3. $template_dir = $_SERVER['SERVER_NAME'].'/swgame/template/';
  4. extract($variables);
  5. include_once $template_dir.$file;
  6. $renderedView = ob_get_clean();
  7. return $renderedView;
  8. }
  9. }
  10.  
  11. $view = new View();
  12. $view->render('test.php', array('foo' => 'bar'));


Spróbuj tak, tylko zmień $template_dir
Tarvald
No wiec tak moze najpierw źródła:

  1. class glowna extends Controller {
  2.  
  3. function __construct() {
  4. parent::__construct();
  5. $this->view->render('glowna');
  6. parent::loadModel('glowna');
  7. $dump = $this->model->pobierzKategorie();
  8. $this->view->kategorie = $dump;
  9. echo 'glowna konstruktor dziala';
  10. }
  11. }
  12.  


W tym momencie po var_dump($this->view->kategorie) dostaje to co chcialem. Jest bosko. Ale niestety w view:

  1. <?php
  2.  
  3. class View {
  4.  
  5. public $kategorie;
  6.  
  7. function __construct(){
  8. var_dump($this->kategorie); // zwraca wartosc null ;/
  9. }
  10.  
  11. public function render($name){
  12.  
  13. require ('Views/'.$name.'/'.$name.'.php');
  14.  
  15. }
  16. }
  17.  
  18. ?>


Dostaje wartosc null !

Dorzuce jeszcze main controller:

  1.  
  2. class Controller {
  3.  
  4. public $model;
  5. public $view;
  6.  
  7. function __construct(){
  8. $this->view = new View();
  9. }
  10.  
  11. public function loadModel($name){
  12. $path = 'models/help_'.$name.'.php';
  13. if(file_exists($path)){
  14. require $path;
  15. $modelname = 'help_'.$name.'';
  16. $this->model = new $modelname();
  17. $this->view->model = new $modelname();
  18. }
  19. }
  20. }


Pomozcie?
Droga do zostania Junior Developerem jest dluga i krepa ;/
nospor
Najpierw renderujesz widok, a dopiero potem, juz po wyrenderowaniu, do tego widoku podpinasz dane i sie glupio dziwisz ze nie dziala....

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.