Witam, dostałem prace jako programista PHP którą zaczynam od 7 stydnia. Do tego czasu mam podszkolić się w zakresie Zend Framework 1. Nigdy nie używałem żadnego frameworka.

Teraz moje pytanie do modelu bo naczytałem się ostatnio w necie i chcę to zrobić tak(podam na przykładzie bloga):
W modelach mam 2 rodzaje klas:
1) Klasa tabeli która operuje bezpośrednio na bazie danych- dziedziczy ona po Zend_Db_Table
  1. Class ArticleTable extends Zend_Db_Table {
  2. public function insertArticle($data) { ... }
  3. public function deleteArticle($artId) { ... }
  4. public function getArticleById($artId) { ... }
  5. public function getArticlesByFilters($filter) { ... }
  6. public function getAllArticles() { ... }
  7. }


2) Klasa modelu która operuje na danych i korzysta z metod zawartych w klasie Tabeli, np sprawdza ona czy dane przesłane w formularzu są poprawne. Tylko tutaj jest moje pytanie jak zwracać komunikaty o nie poprawnych błędach. Myślałem, żeby w modelu zdefiniować stałe z komunikatami błędów. Oto mój koncept:
  1. <?php
  2. class ArticleModel extends MyMainModel {
  3. //Definicja errorów
  4. const SUCCESS = 0;
  5. const ERROR_INVALID_TITLE = 1;
  6. const ERROR_INVALID_EMAIL = 2;
  7. const ERROR_ART_IS_NOT_EXISTS = 3;
  8. ...
  9.  
  10. private $tableObj;
  11.  
  12. public function __construct() {
  13. $this -> tableObj = new ArticleTable;
  14. }
  15.  
  16. public function createArticle ($data) {
  17. if (empty($data['title']))
  18. return self::ERROR_INVALID_TITLE;
  19.  
  20. if (!preg_match('...', $data['email']))
  21. return self::ERROR_INVALID_EMAIL;
  22.  
  23. $insertResult = $this -> tableObj -> insertArticle($data);
  24.  
  25. if ($insertResult === true)
  26. return self::SUCCESS;
  27. }
  28.  
  29. public function getLastArticles($filters) {
  30. //Sprawdźmy poprawnosc filtrow
  31. foreach ($filters as $key => $filter)
  32. if (empty($filter)
  33. unset($filters[$key]);
  34.  
  35. //Filtry to np Ostatnie 3 artykuły, Z oceną większą od X, dodane Przed JAKĄŚ DATĄ itp
  36.  
  37. $articles = $this -> tableObj -> getArticlesByFilter($filters);
  38. result (empty($articles)) ? self::ERROR_ART_IS_NOT_EXISTS : $articles;
  39. }
  40. }


Pytania:
1) Czy to jest dobre podejście? W internecie znalazłem film gdzie prowadzący mówił: Dobra aplikacja cechuje się chudymi kontrolerami i grubymi modelami. Co sądzicie na ten temat?
2) Czy obróbka odebranych danych np kolorowanie składni kodu w artykule jeśli się pojawi, czy nawet zamiana adresu email na jakiś adres odporny na boty.
3) Czy powinienem np w klasie ArticleTable korzystać z tabeli użytkownika np do pobrania danych autora(bo oczywiscie w tabeli articles będe trzymał tylko klucz obcy z ID_USERA), jeśli nie to jak to rozwiązać?
4) Pytanie teoretyczne jak rozwiązać taki problem:
Mam system logowania(jeszcze nie wiem jak w zendzie działa taki mechanizm) na podstronie www.mojastrona.pl/user/login/ gdzie moge się zalogować. I teraz gdzie trzymać dane po zalogowaniu zebym mogł miec do nich dostęp w większej części aplikacji oraz na innych podstronach. Czy warto zrobić jakąś klasę np User i w niej pobierać z bazy dane korzystając przy tym z sesji? Tylko jak taką klasę rozwiązać? Czy zrobić to jako kontroler? Ale wtedy jak rozwiązać system wyświetlania tych danych na każdej z podstron w głównym layoucie?


Z góry dziękuje za odpowiedź na poniższe pytania.