Hallo,
(Authentifizierung) ist schon vorhanden und muss mitgenutzt werden
Da würde ich ne klasse Authentification machen mit methoden wie
void authenticate($user, $password)
bool isAuthenticated();
array errors();
$user wäre ein Objekt der Klasse User die dann einen solchen User repräsentiert mit sachen wie:
- username
- firsname
- lastname
- passwordhash
save() // speichert diesen user in der datenbank
destroy() // löscht den user aus der datenbank
Da so etwas ja bei jedem Model vorkommt (bei dir User, GuestbookEntry, Permission, Comment, etc.) gibt es so was schon fertig programmiert und heißt ORM Object-Relational Mapping (ein Paar Beispiele wären http://www.propelorm.org/, http://www.doctrine-project.org/, etc.)
(Berechtigungen) sit schon vorhanden und muss "irgendwie" mitgenutzt werden
Ne klasse Permission mit Methoden wie;
bool userCan($user, $action, $object)
// $action ist z.b. create, update, delete, show
// $object ist z.b. ein anderer User (admin sollte z.b. andere user löschen dürfen) oder GuestbookEntry, Comment, etc.
Detail-Darstellung für Alle, satzweise oder seitenweise
Listendarstellung mit Kurzdaten
Neueintrag
Editierungsmöglichkeit (mit Cookie) innerhalb 24 Stunden
Freigabe/Sperre (Admin)
Kommentar (durch Alle)
Das müsste in 3 Bereiche unterteilt werden die models, den controller und die views (templates).
// Controller
GuestbookEntryController:
void index()
void show($id) {
// nur als Beispiel in Pseudocode
$gb_entry = GuestBookEntryModel::find($id);
$template = new Template("/guestbook_entry/show.phtml");
$template->gb_entry = $gb_entry;
$template->run();
}
void create($array)
void update($id, $array)
void destroy($id)
// Models
GuestbookEntryModel:
- id
- user
- title
- body
void save()
bool validate()
void destroy()
array comments()
CommentModel:
- id
- user
- guestbook_entry_id
- body
void save()
bool validate()
void destroy()
UserModel
- username
- firsname
- lastname
- passwordhash
void save()
bool validate()
void destroy()
// Templates
Können normale .phtml-Dateien sein oder man benutzt so was wie Smarty.
/views/guestbook_entry/show.phtml
<div class="guestbook-entry">
<h2><?php echo $this->gb_entry->getTitle() ?></h2>
<p>User: <?php echo $this->gb_entry->user->getUsername() ?></p>
<p><?php echo $this->gb_entry->getBody() ?></p>
</div>
Es sollen nur die Klassen geladen werden, die für das jeweilige Dokument am Browser erforderlich sind.
Das ist ehrlich gesagt das letzte deiner Probleme, die Implementierung dessen wird vielleicht die Seiten vielleicht 2 Milisekunden früher ausgeben und Autoload löst das Problem ja auch einigermaßen elegant.
Zum Erben, du könntest dir eine klasse Model basteln, die schon sachen wie destroy() implementiert weil die allgemeingültig sind wenn du in jedem Model eine $id hast und davon dann in GuestbookEntryModel, CommentModel und UserModel erben, dann brauchst du das da einzeln nicht mehr implementieren.
Ansonsten, aber das ist für den Anfang vielleicht overkill, man sieht dass GuestbookEntryModel und CommentModel fast gleich aussehen, sie unterscheiden sich eigentlich nur durch title in GuestbookEntryModel, da könnte man sich überlegen ob GuestbookEntryModel nicht von CommentModel erben könnte und nur durch $title erweitert wird.
Jeena