Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF]Prosta obsługa bazy
Forum PHP.pl > Forum > PHP > Frameworki
klapaucius
Mam problem w ZF, by pobrać z bazy danych rekordy. W pliku z zasobami mam coś takiego:
Kod
resources.db.adapter = "pdo_mysql"
resources.db.params.dbname = "wiersze"
resources.db.params.host = "localhost"
resources.db.params.username = "root"
resources.db.params.password = ""
resources.db.params.charset = "utf8"

W akcji kontrolera mam taki kod:
  1. public function indexAction()
  2. {
  3. $bootstrap = $this->getInvokeArg('bootstrap');
  4. $db = $bootstrap->getResource('db');
  5. $zapytanie = 'select * from wiersz order by id';
  6. $this->view->wiersze = $db->fetchAll($zapytanie);
  7. }

Jednak przy próbie odpalenia wyskakuje mi taki błąd:
Kod
Fatal error: Call to a member function fetchAll() on a non-object in D:\xampp\htdocs\wierszerozewicza\application\controllers\IndexController.php on line 16


Czyli chodzi o to, że zmienna $db w indexAction nie jest obiektem. Ale dlaczego?
Dopiero zaczynam przygodę z Zend więc proszę o wyrozumiałość. Pozdrawiam!
cudny
Musisz poczytać o MVC - to co robisz nie ma żadnego sensu i niestety musisz się tego nauczyć.
Po co mamy powtarzać tutki ?

Po polsku chyba najlepiej skorzystać z tego:
http://www.heavymind.net/zend-framework-tutorial/
klapaucius
Cytat(cudny @ 28.11.2012, 19:10:21 ) *
Musisz poczytać o MVC - to co robisz nie ma żadnego sensu i niestety musisz się tego nauczyć.
Po co mamy powtarzać tutki ?

Po polsku chyba najlepiej skorzystać z tego:
http://www.heavymind.net/zend-framework-tutorial/

Zrobiłem ten projekt od nowa, i teraz o dziwo działa!
Widocznie przy czymś innym wcześniej zchrzaniłem.
Dlaczego uważasz, że "to co robię nie ma żadnego sensu", skoro okazuje się że kod ten działa jednak poprawnie?
Poza tym nie wymyśliłem go z głowy, tylko bazuje on na przykładzie z książki "Zend Framework od podstaw" wyd. Helion. Więc dlatego mnie to zdziwiło, że na początku nie działał.

W każdym razie może ustosunkujesz się do tego, dlaczego uważasz moją metodę (a raczej autora książki) odczytywania rekordów z bazy danych za złą i bez sensu? Być może masz rację, tylko to uzasadnij.

Pozdrawiam!
Pilsener
ZF to nie jest czysty MVC ale mniejsza o większość - chodzi o podział aplikacji na 3 warstwy:

1. Danych
2. Logiki
3. Prezentacji

Kontroler to warstwa logiki więc nie może zajmować się obsługą bazy czy przygotowywaniem danych. To zadanie dla modelu, który jest klasą w tym celu wyspecjalizowaną. Kontroler jedynie przekazuje dane z modelu do widoku (który jednak w ZF jest bardziej templatem).

W kontrolerze robisz coś w stylu:
  1. $model = new Model_Articles();
  2. $this->view->articles = $model->getAllArticles();


A w modelu:
  1. class Model_Articles extends Zend_Db_Table_Abstract {
  2. /**
  3. * The default table name
  4. */
  5. protected $_name = 'articles';
  6.  
  7. public function getAllArticles(){
  8. $select = $this->select();
  9. return $this->fetchAll($select);
  10. }
  11.  
  12. }
klapaucius
Aha. No mniej więcej rozumiem o co chodzi. Czyli, to co powinienem robić w modelu, robię w kontrolerze.
No ale tak było to pokazane w książce. Być może autor chciał jedynie skupić się na pokazaniu jak pobierać te dane, natomiast nie zwracał uwagi już na poprawną architekturę i rozmieszczenie kodu. Z resztą nie wiem - nie mi to oceniać.

Tak apropos: możecie polecić jakiś tutorial odnośnie czystego MVC? Oczywiście o ile takowy istnieje. Nie ukrywam też, iż dobrze by było gdyby był on po polsku.

Pozdrawiam serdecznie!
cudny
Ehh... Wejdź w ten link, który Ci podałem wyżej, ja jak zaczynałem pracę z ZF jakieś 4 lata temu to właśnie od tego tutka, na prawdę mi pomógł
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.