Użycie klas CModel (CActiveRecord, CFormModel)

Cześć,

Mam pytanie odnośnie użycia klas CModel, możliwe, że trochę głupie, ale podobno, nie ma takich:P

Wygenerowałem formularze CRUD, na podstawie modelu User (dziedziczy z CActiveRecord):




+---------------------+

| users               |

+---------------------+

| id (PK) int(11)     |

| login varchar(64)   |

| passwd varchar(40)  |

| name varchar(64)    |

| surname varchar(64) |

| email varchar(64)   |

| lastActive datetime |

| active tinyint(1)   |

+---------------------+



Wszystko działa super, ale chciałbym dodać kilka dodatkowych pół np. powtórne potwierdzenie hasła. W tym miejscu nie wiem, czy lepiej jest stworzyć nowy, dodatkowy model dziedziczący z CFormModel, czy dodać nową właściwość i regułę do modelu User (co nie będzie odpowiadać kolumną w tabeli users)?

Ponadto chciałbym, aby w formularzu od razu wskazywało się grupy, do których ma należeć user, a odwołania których przechowywane są w tabeli




+---------------------------+

| users_groups              |

+---------------------------+

| id_user (PK) int(11)      |

| id_group (PK) smallint(6) |

+---------------------------+



Teraz drugie pytanie, czy powinienem regułę sprawdzającą (czy została wybrana minimalnie jedna grupa), przerodzić w modelu User (dodać nową własność i regułę sprawdzającą), czy może w samym kontrolerze?




+---------------------+

| groups              |

+---------------------+

| id (PK) smallint(6) |

| group varchar(64)   |

+---------------------+



Z góry dziękuję za pomoc:)

Ja stosuję właściwość w modelu User, wtedy łatwo porównać hasła (walidator "compare").

Z tym jest trochę zabawy, poszukaj było o tym sporo na forum, hasło klucz - "MANY_MANY". Są rozszerzenia, które usprawniają zapisywanie przy tej relacji, ja stosuję CAdvancedArBehavior.

Myślę, że walidator dopisany w modelu będzie najlepszym rozwiązaniem, na dniach będę to przerabiał to dam znać…

Ależ oczywiście, że są! :) Na przykład pytanie: czy mogę się wysikać pod wiatr i nie zostać oblanym? :P

Tak, jak Ci odpisał przedmówca - zdecydowanie w modelu, dodając nowe pola (właściwości) i ewentualnie dodatkowo oprogramowując ich logikę w metodach takich, jak afterSave(), beforeSave() dziedziczonych (nadpisywanych) z klasy nadrzędnej, jeśli potrzebujesz robić z tymi wartościami coś więcej niż tylko je walidować (jak w przypadku ponownego wpisania hasła).

Ponownie, jak pisał przedmówca, chodzi o reakcje MANY_MANY, z tym że ja polecam najpierw przeczytanie choćby pobieżnie dokumentacji do Yii - podręcznika do napisania własnego bloga oraz podręcznika głównego. Tam te zagadnienia są w sposób bardzo dobry wytłumaczone podczas, gdy na forum może być długie szukanie odpowiedzi. Przy czym, jeśli Twój angielski jest dobry to polecam wersję angielską Definitive Guide, bo tłumaczenie polskie jest lekko mówiąc niedoskonałe (sporo wnerwiających literówek, jak poważnych błędów).

A tak w ogóle, to gorąco, bardzo gorąco polecam przeszukanie Cookbook i rozszerzeń zanim zaczniesz pisać własne rozwiązania. Po co wywarzać na nowo otwarte drzwi lub ponownie wymyślać koło? Na podstawie tabeli wnioskuję, że piszesz system do zarządzania użytkownikami, których do tej pory dla yii powstało tylko piętnaście! :) W tym rozszerzenie rights, które wydaje się być naprawdę ciekawe.

Zdecydowanie walidator w modelu, do tego przecież one powstały…