Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][inne]Wyświetlanie templatek (smarty) w architekturze MVC, przekazywanie obiektu między klasami
Forum PHP.pl > Forum > Przedszkole
cod3r
Witam,
Dopiero uczę się Smarty, a także próbuję programować przy użyciu MVC i mam następujący problem. Chciałbym wyświetlić sobie stworzony szablon logowanie.tpl. I mam 3 takie oto proste klasy.

Klasa Controller.php
  1. <?php
  2. class Controller {
  3.  
  4. //obiekt
  5. private $smarty;
  6.  
  7. public function __construct(){
  8. // $this->uruchomModel();
  9. $this->uruchomWidok();
  10. }
  11. /*
  12. private function uruchomModel(){
  13. $this->Model = new Model;
  14. }
  15. */
  16. //stworzenie obiektu smarty
  17. private function odpalSmarty(){
  18. $this->smarty = new Smarty;
  19. }
  20.  
  21.  
  22. private function uruchomWidok(){
  23. $this->View = new View($this->smarty);
  24. }
  25.  
  26. }
  27. ?>


Klasa Model.php
  1. <?php
  2. class Model {
  3.  
  4. //na razie pusto
  5.  
  6. }
  7. ?>


Klasa View.php
  1. <?php
  2. require_once('./smarty/Smarty.class.php');
  3. class View {
  4.  
  5. private $smarty;
  6.  
  7. public function __construct(){
  8. $this->wyswietlStroneGlowna();
  9. }
  10.  
  11. private function wyswietlStroneGlowna(){
  12. //gdy tak jak ponizej, czyli stworze tutaj sobie obiekt to poleci i sie odpali
  13. //$smarty = new Smarty;
  14. $smarty->display('./smarty/templates/logowanie.tpl');
  15. }
  16.  
  17. }
  18. ?>


A więc tak, jak przekazać obiekt stworzony w kontrolerze do widoku aby można było wyświetlić szablon? Bo jak sobie obiekt stworzę bezpośrednio w metodzie wyswietlStroneGlowna() to oczywiście wszystko pójdzie jak należy.
b4rt3kk
Na smarty się nie znam, ale to co robisz przeczy założeniom obiektowości. Jak możesz tworzyć nowy obiekt wewnątrz klasy? Wiesz co to hermetyzacja?

Jeśli chcesz się odwoływać do metod wewnątrz innej klasy stosujesz dziedziczenie.
BlackDante
Cytat(b4rt3kk @ 9.09.2012, 20:09:10 ) *
Na smarty się nie znam, ale to co robisz przeczy założeniom obiektowości. Jak możesz tworzyć nowy obiekt wewnątrz klasy? Wiesz co to hermetyzacja?

Jeśli chcesz się odwoływać do metod wewnątrz innej klasy stosujesz dziedziczenie.


Rozumiem hermatyzację, ale zaciekawiło mnie Twoje ostatnie zdanie: "Jeśli chcesz się odwoływać do metod wewnątrz innej klasy stosujesz dziedziczenie.", które może się mylę ale jest nieco błędne, ponieważ wnioskując z tego zdania Controller powinien dziedziczyć po widoku ? (*.*) Istnieje wiele sposób na na przekazywanie obiektów między klasami, od zwykłego dependency injection po bardziej zaawansowane metody.

Co do samego wątku radziłbym poczytać o metodzie __autoload(), która będzie Ci bardzo ładnie ładować potrzebne klasy i w kontrolerze zamiast funkcji uruchomWidok itp bedziesz miał:
  1. public function index()
  2. {
  3. $data = Model::factory('table')->getSomeData();
  4. //Do Something with Data
  5. $view = View::factory('index')->assign('data',$data);
  6. $view->render();
  7. }
  8.  
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.