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
Class ArticleTable extends Zend_Db_Table { public function insertArticle($data) { ... } public function deleteArticle($artId) { ... } public function getArticleById($artId) { ... } public function getArticlesByFilters($filter) { ... } public function getAllArticles() { ... } }
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:
<?php class ArticleModel extends MyMainModel { //Definicja errorów const SUCCESS = 0; const ERROR_INVALID_TITLE = 1; const ERROR_INVALID_EMAIL = 2; const ERROR_ART_IS_NOT_EXISTS = 3; ... private $tableObj; public function __construct() { $this -> tableObj = new ArticleTable; } public function createArticle ($data) { return self::ERROR_INVALID_TITLE; return self::ERROR_INVALID_EMAIL; $insertResult = $this -> tableObj -> insertArticle($data); if ($insertResult === true) return self::SUCCESS; } public function getLastArticles($filters) { //Sprawdźmy poprawnosc filtrow foreach ($filters as $key => $filter) //Filtry to np Ostatnie 3 artykuły, Z oceną większą od X, dodane Przed JAKĄŚ DATĄ itp $articles = $this -> tableObj -> getArticlesByFilter($filters); } }
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.