![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 13 Dołączył: 3.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam serdecznie,
od wieeeelu godzin próbuję rozwiązać ten dziwaczny problem, szukam w różnych tutorialach, na różnych forach, stosuję niby rozwiązania identyczne jak tam, jak widzę, że nie działa to sam próbuję kombinować i ciągle to samo: "An error occurred. Application error." albo "Fatal error: Call to a member function select() on a non-object ..." Chcę mieć model, do którego przez kontroler będę przesyłał zmienną wziętą z parametru w URLu, która to zmienna będzie nazwą tabeli w bazie danych. Potrafię to zrobić w ten sposób: Bootstrap.php:
Funkcja w modelu:
Ale chciałbym wykorzystać w pełni możliwości ZF i skorzystać z Zend_Db_Select. Przykładowy kod, który starałem się ujarzmić: w modelu:
Co ja mam zrobić/dodać/usunąć w modelu/kontrolerze/bootstrapie, żeby ta lub jeszcze prostsza wersja (bez dwóch pierwszych linijek) działała? :/ Aha, i te rozwiązania nie działają mi nawet kiedy w samym modelu na sztywno ustawię z jakiej tabeli ma brać dane. Niestety manual Zenda również mi nic nie dał.. Ten post edytował kalipek 6.03.2011, 19:56:54 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli masz
To w modelu nie musisz się odwoływać do adaptera (bo bierze defaultowy uprzednio zdefiniowany) W tym przypadku to też nie jest potrzebne:
Bo możesz to uzyskać poprzez
W modelu:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 13 Dołączył: 3.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem jak piszesz, wyszło:
wkleję cały kod z modelu:
czy to tak miało wyglądać? Czy np z nazwą klasy jest wszystko ok? Wiem, że jak chcę mieć jeden model dla jednej tabeli to wtedy nazywam go tak jak tabelę w bazie i korzystam z Zend_Db_Table_Abstract, przykładowo:
działa pięknie i rozumiem w jaki sposób, niczego nie muszę dodawać w bootstrapie, bo dane bierze bezpośrednio z application.ini. A z tamtym ustrojstwem za chiny nie daję rady :-) Mogę oczywiście skorzystać z rozwiązania "jeden model = jedna tabela", ale chciałbym nauczyć się robić to na różne sposoby. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 401 Pomógł: 5 Dołączył: 14.09.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Jezeli dobrze, widze to ustawiasz dbAdaptor'a w stylu "tablicowym"
A odwolujesz sie w stylu "obiektowym" I stad masz oryginalny blad: "Call to a member function select() on a non-object ..." |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 13 Dołączył: 3.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Tak, to było jedno z miliona wypróbowanych rozwiązań i działało w przypadku tej łopatologicznej metody, którą opisałem w pierwszym poście ;-) teraz pozbyłem się tego zgodnie z radą Melkorma i dalej nic.
EDIT. Udało się(IMG:style_emoticons/default/exclamation.gif) (IMG:style_emoticons/default/biggrin.gif) Dzięki chłopaki. Dla potomnych, po kolei: w bootstrapie:
w kontrolerze:
w modelu:
w widoku:
Ten post edytował kalipek 6.03.2011, 23:25:07 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
1. Po co w bootstrapie piszesz metodę inicjującą bazę danych skoro dzięki resources możesz to wszystko zapisać w pliku konfiguracyjnym (application.ini)
2.Model powinien być odzwierciedleniem jednego źródła danych, jeżeli chcesz grupę metod dla kilku/wszystkich tabel to stwórz sobie klasę która będzie pomostem między Twoimi modelami a Zend_Db_Table_Abstract. 3. Nazwa modelu nie musi mieć nazwy takiej jak w bazie, teoretycznie może ona nazywać sie dowolnie z odpowiednim przedrostkiem by Autoloader ją znalazł, jeżeli dziedziczy po Zend_Db_Table_Abstract (a powinna) nie musisz pisać zbędnego kodu by odwołać się do adaptera, wtedy wystarczy zrobić tak jak pisałem i wszystko będzie śmigać. Plusem tego wszystkiego jest to że to jak Ty to piszesz jest "na około" i robisz sobie tylko więcej pracy nie wykorzystując całej mocy Zend_Framework'a. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 13 Dołączył: 3.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
Masz rację, z pkt 1 to już po prostu zmęczenie wzięło górę. Uczę się dopiero Zenda i chcę najpierw zrobić aplikację, która działa tak jak sobie tego życzę i dopiero potem ją ulepszać, uczyć się coraz bardziej efektywnych i optymalnych metod.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 16:01 |