![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 006 Pomógł: 111 Dołączył: 23.07.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Witam
Cały czak kontynuuję naukę Zenda i natknąłem się na fajny blog: http://www.karolnowicki.pl/zend-framework/artykuly/ i wykonuje w nim krok po kroku wszystko z serii "Praca z bazą danych". W części pierwszej pominąłem dopisek do pliku Boostrap, ale dopisuje wszędzie przedrostek Application. Ale do rzeczy. Model:
Kontrolery (ustawiłem sobie w nim echo, aby wiedzieć gdzie się wysypuje):
Formularz:
I teraz gdy wypełnię formularz to zatrzymuje mi się na wykonaniu metody nowyUzytkownik. Wyświetla się tylko wszystko do echo "odebrałem values"; echo $email; a potem jest pusta, biała strona. Gdy błędnie wypełnię formularz, to pokazują się komunikaty o błędach i wraca do strony z formularzem. W bazie nie ma żadnych nowych rekordów. To samo się dzieje (białą, pusta strona), gdy chcę wyświetlić listę użytkowników (adres/uzytkownicy/lista-uzytkownikow). Plik applacation.ini: Kod [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.frontController.params.displayExceptions = 0 resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" resources.db.adapter = "pdo_mysql" resources.db.params.host = "localhost" resources.db.params.username = "user" resources.db.params.password = "haslo" resources.db.params.dbname = "naukazend2" resources.db.params.charset = "utf8" resources.db.isDefaultTableAdapter = true [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1 Gdzie jest błąd? ![]() ROZWIĄZAŁEM: Model ma być dziedziczony z Zend_Db_Table ![]() Ten post edytował IceManSpy 5.04.2011, 22:39:48 -------------------- |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 5 Dołączył: 26.01.2011 Ostrzeżenie: (40%) ![]() ![]() |
Na przyszlosc: error_reporting(E_ALL) + error.log serwera Twoim przyjacielem
![]()
Powód edycji: [phpion]: Na przyszłość: powstrzymaj się przed takimi poradami, które nic nie wnoszą do tematu (tym bardziej, że są napisane 2 dni po rozwiązaniu problemu).
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 11 Dołączył: 27.10.2010 Skąd: Kutno/Poznań Ostrzeżenie: (0%) ![]() ![]() |
Łoooo, w zendzie tak nie wyświetlasz błędów, możesz sobie zmienić poniższe trzy linijki w pliku config.ini z:
phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 resources.frontController.params.displayExceptions = 0 na phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1 Ale wtedy musisz pamiętać o tym, aby przy puszczaniu strony live przywrócić standardowe ustawienia Powyższy model jest bleeee (oczywiście moim zdaniem)! Dla mnie dobry model ma następujące funkcje: toArray(); __set(); __get(); setOptions($array = null); Dobry model wygląda tak (w zend tools: "create model User"):
I do tego potrzebny jest jeszcze mapper (Komenda w zend_tools "create model UserMapper"):
potrzebujesz jeszcze bazy danych (w zend tools: "create db-table User users"); I stworzenie nowego użytkownika wygląda tak (w kontrolerze):
I powinno wszystko elegancko śmigać. Ten post edytował KrzysiekWildfire 14.04.2011, 21:16:47 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
A po co taki kombajn? Przecież to wszystko jest gotowe w Zend_Db_Table
Wystarczy prosty model:
Wykorzystanie:
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 11 Dołączył: 27.10.2010 Skąd: Kutno/Poznań Ostrzeżenie: (0%) ![]() ![]() |
Jestem już tak przyzwyczajony - tym bardziej, że nie piszę małych projektów a tworząc tak mam wszystko na swoim miejscu - i można w takiej klasie tworzyć metody do zarządzania danymi. Potworzyłem sobie klasy w których mam te najczęściej wykorzystywane funkcje (__get, __set, itd) i stworzyłem sobie generator - Czysto, i wszystko z łatwością mogę stworzyć w kilka chwil.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem, czy prościej, bo do wykonania tak banalnej czynności jest załączany zewnętrzny plik i jakaś klasa. Moje rozwiązanie mieści się w 1 linijce i robi to samo. A po co taki kombajn? Przecież to wszystko jest gotowe w Zend_Db_Table Wystarczy prosty model:
Wykorzystanie:
Eee no, jak ma być prosto to raczej tak:
![]() -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 11 Dołączył: 27.10.2010 Skąd: Kutno/Poznań Ostrzeżenie: (0%) ![]() ![]() |
wykorzystanie mojego modelu wygląda tak:
No a poza tym, jeżeli tak wyciągniesz te dane, np do kontrolera - to chyba nie manipulujesz w nim tymi danymi - Powstaje potężny zgrzyt - kontroler nie służy do manipulowania danymi - funkcje pisze się w modelach. MVC |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
No a poza tym, jeżeli tak wyciągniesz te dane, np do kontrolera - to chyba nie manipulujesz w nim tymi danymi - Powstaje potężny zgrzyt - kontroler nie służy do manipulowania danymi - funkcje pisze się w modelach. MVC W modelach operujesz na danych z bazy, zapisywaniu ew. szybkim przetwarzaniu - resztę robisz w kontrolerach, ja używam do tego jeszcze pisanych przeze mnie bibliotek ale całość i tak trzeba wypluć do widoku z kontrolera wiec... nie rozumiem jak przetwarzasz to wszystko w modelu. Ogólnie tworzę sobie w library obok Zend katalog powiedzmy Project i w nim daje funkcje związane powiedzmy z XML czy przetwarzanie danych czy jakieś stałe walidacje formularzy, które często wykorzystuje. Nie wyobrażam sobie tego mieszać z zapytaniami do bazy - model jest tylko do użytku od strony biznesowej kodu, a nie do umieszczania w nim jakiś modułów. Bardzo często robię rozbudowane zapytania w pracy i nie wiem jak można do klas modeli wstawiać jakieś inne metody wykorzystywane w kontrolerze ? Przecież w modelu dziedziczysz sporo danych z innych klas i co - jeśli chce sobie napisać funkcję powiedzmy, no nie wiem... between:
I co - walne to do modelu ? Chyba inaczej rozumiemy MVC ![]() -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 11 Dołączył: 27.10.2010 Skąd: Kutno/Poznań Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
Ooo, super książka, skąd masz taką
![]() Niestety tak jak napisałem, wszytkie opisane w niej metody dotyczą jedynie danych związanych z modelem czyli... wow ![]() ![]() Niemniej jednak jeśli musisz zrobić walidację, której zend nie posiada to co zrobisz ? wrzucisz do modelu jako metoda i ... kurcze - cały model będziesz musiał wywołać żeby tej metody użyć innym modelu ? Model jest tylko do obróbki danych używanych do insetów, selectów i updatów. Po seleccie z bazy danych obrabiasz to już w controlerach i własnych klasach ! Acha - żeby nie było - odwołuję się tutaj do twoich słów: Cytat Powstaje potężny zgrzyt - kontroler nie służy do manipulowania danymi - funkcje pisze się w modelach. A jeśli chodzi o __get __set to jak najbardziej używać należy ale... funkcji nie pisze się w modelach Ten post edytował cudny 21.04.2011, 20:40:26 -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 13 Dołączył: 3.02.2011 Ostrzeżenie: (0%) ![]() ![]() |
taaa, obrabiaj sobie w kontrolerze, obrabiaj
http://blog.astrumfutura.com/2008/12/the-m...-unappreciated/ http://www.littlehart.net/atthekeyboard/20...nny-controllers |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 387 Pomógł: 66 Dołączył: 31.03.2005 Skąd: Kielce Ostrzeżenie: (0%) ![]() ![]() |
taaa, obrabiaj sobie w kontrolerze, obrabiaj http://blog.astrumfutura.com/2008/12/the-m...-unappreciated/ http://www.littlehart.net/atthekeyboard/20...nny-controllers Wszystkie moje posty w tym temacie to bzdura. Ogólnie cieszę się tylko, że większość aplikacji i tak pisałem na osobnych modułach tworząc własną bibliotekę ( Cytat taaa, obrabiaj sobie w kontrolerze, obrabiaj - nic nie obrabiałem w kontrolerze ![]() ![]() Oczywiście pojmując (błędnie) MVC poszedłem na skróty i uczyłem się od kolegów z pracy którzy... chyba zrobili tak jak ja ![]() Ten błąd pojmowania MVC jest dokładnie opisany w podanym przez kalipka linku ![]() Od 2 lat żyłem z klapkami na oczach, a wystarczyło jednak samemu troszki się pouczyć ![]() Artykuł: http://blog.astrumfutura.com/2008/12/the-m...-unappreciated/ otworzył mi oczy ![]() -------------------- ..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 11 Dołączył: 27.10.2010 Skąd: Kutno/Poznań Ostrzeżenie: (0%) ![]() ![]() |
Ja też z początku miałem ZŁE podejście do M. Wiadomo, nie od razu Rzym zbudowano. Życzę powodzonka przy przyszłych projektach.
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 426 Pomógł: 1 Dołączył: 2.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
public function fetchAll($select = null){ $result = $this->getDbTable()->fetchAll($select); if (count($result) === 0) return null; $results = array(); foreach ($result as $row){ $results[] = new Application_Model_User($row->toArray()); } return $results; } Mam pytanie @KrzysiekWildfire. Jak rozwiązałeś opakowanie zwracanych danych w metodzie fetchAll, gdy używasz klasy Zend_Paginator? Próbowałem robić:
Niestety po zwróceniu wyników w widoku nie mogę wygenerować paginatora, ponieważ zwracane wyniki nie są instancją klasy Zend_Paginator. // edycja Już rozwiązałem problem. Należy stworzyć filtr: Kod $paginator>setFilter(new Zend_Filter_Callback(array($this, 'getProductObjects'))); następnie tworzymy metodę: Kod <?php
public function getProductObjects($result) { $entries = array(); foreach($result as $row) { $entries[] = new Application_Model_Product($row instanceof Zend_Db_Table_Row ? $row->toArray(): $row); } return $entries; } ?> Ten post edytował Apo 29.04.2011, 22:29:56 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.08.2025 - 23:46 |