Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [zend][mysql]Nowy rekord
Forum PHP.pl > Forum > Przedszkole
fxBobi
Od niedawana zacząłem poznawać Zenda i napotkałem błąd , ale nie wiem co jest powodem . ]

Krótki opis.

Stworzyłem controller - register i do tego konrollera dodałem action newuser
A akcji dodałem odwołanie do modelu "Aplication_Model_Register" , i w modelu wykorzystuje funkcje insert(array())
Dodatkowo Model Register połączyłem z Db-table users .

I gdy w controllerze wywołuje funkcje CreateUser(array('login'=>'Kowalski')); to pojawia się komunikat "Apliaction Error"

Wiem że moj opis jest może nie zbyd jasny dlatego poniżej zawartość każdego z plików.

Controller
  1. <?php
  2.  
  3. class RegisterController extends Zend_Controller_Action
  4. {
  5.  
  6. public function init()
  7. {
  8. /* Initialize action controller here */
  9. }
  10.  
  11. public function indexAction()
  12. {
  13. // action body
  14. }
  15.  
  16. public function newuserAction()
  17. {
  18. $m_register = new Application_Model_Register();
  19. $m_register->creatuser(array(
  20. "login" => "bobi"
  21. ));
  22.  
  23. }
  24.  
  25.  
  26. }
  27.  
  28.  
  29.  


Zawartość modelu register

  1. <?php
  2.  
  3. class Application_Model_Register
  4. {
  5. public function creatuser($array) {
  6. $dbTableUsers = new Application_Model_DbTable_Users();
  7. $dbTableUsers ->insert($array);
  8. }
  9.  
  10.  
  11. }


Zawartośc Db-table
  1. <?php
  2.  
  3. class Application_Model_DbTable_Users extends Zend_Db_Table_Abstract
  4. {
  5.  
  6. protected $_name = 'users';
  7. protected $_primary = 'id';
  8.  
  9.  
  10. }


Sephirus
1. Czy dana akcja kontrolera odpalana z przeglądarki:

  1. public function newuserAction()
  2. {
  3. //$m_register = new Application_Model_Register();
  4. //$m_register->creatuser(array(
  5. //"login" => "bobi"
  6. //));
  7.  
  8. }


z zakomentowanymi linijkami w ogóle się odpala?

2. Źle używasz dziedziczenia - nie rozumiesz idei Db_Table. Zamiast:

  1. class Application_Model_Register
  2. {
  3. public function creatuser($array) {
  4. $dbTableUsers = new Application_Model_DbTable_Users();
  5. $dbTableUsers ->insert($array);
  6. }
  7. }
  8.  
  9. class Application_Model_DbTable_Users extends Zend_Db_Table_Abstract
  10. {
  11. protected $_name = 'users';
  12. protected $_primary = 'id';
  13. }


Powinno być:

  1. class Application_Model_Register extends Zend_Db_Table_Abstract
  2. {
  3. protected $_name = 'users';
  4. protected $_primary = 'id';
  5.  
  6. public function creatuser($array) {
  7. $this->insert($array);
  8. }
  9. }


I nawet zmieniłbym nazwę tego modelu z .._Model_Register na .._Model_Users.

Chodzi po prostu o to, że modele robimy dla danej tabeli w bazie bądź danych tabel - nie dla danej operacji.

Zatem nie robimy modelu dla rejestracji tylko model dla użytkowników i w nim między innymi powinna znaleźć się metoda dodająca uzytkownika do bazy wink.gif
fxBobi
Cytat
Czy dana akcja kontrolera odpalana z przeglądarki:


Tak uruchamia się.

Cytat
Źle używasz dziedziczenia - nie rozumiesz idei Db_Table. Zamiast:


Tak , dopiero raczkuje .


Cytat
$dbTableUsers = new Application_Model_DbTable_Users();
$dbTableUsers ->insert($array);


Tą metodę pobrałem od JREAM (YouTube)

Postępuje zgodnie jak w wyżej podanym filmiku , ale mam błąd.





Sephirus
Ok rozumiem że autor tego filmiku tak założył - że będzie robił modele-modeli smile.gif Można ale to mało efektywne.

Co do twojego błędu to za mało mam informacji by cokolwiek powiedzieć :/

Widać na bank, że coś jest nie tak z bazą danych...

Możesz zrobić jeszcze dwie rzeczy:

1. public function newuserAction() - w tej metodzie kontrolera jeśli zostawisz odkomentowane tylko powołanie obiektu z modelu to czy wywala ten błąd? Jeśli tak to może to być problem z ładowaniem klas do zenda... Nie będę zagłębiał się w filmiku ale sprawdź czy na pewno plik z klasą jest tam gdzie powinien czy nazwya się tak jak powinien (zwróć uwagę na wielkość liter), czy mas odpalony autoloader klas - coś tutaj by wtedy nie grało...

2. Też ciężko mi uwierzyć w to, że zend wyrzuca tylko tekst "Application error". czy nie ma tam nic więcej? Nic więcej nie podaje po tym błędzie? Jesli jest coś jeszcze to wrzuć cały opis tego błędu to zobaczymy z czym walczymy
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.