Mein eigenes MVC-Framework: Der erste Controller und die Action-Methoden

<< Zurück zur Übersicht

In diesem Kapitel geht es darum, wie man eine Seite erstellt, die verschiedene Aktionen ausführen kann.

Controller

Jeder Controller bekommt eine eigene Datei in /projektname/classes/Controller. Der Dateiname ist so aufgebaut: Controllername.class.php.

In der Datei selbst heißt der Controller „Controller_Controllername“. Unser Indexcontroller heißt also Controller_Index. Der Indexcontroller ist in der Regel der Startcontroller.

Er sieht bei mir so aus:

class Controller_Index extends FW_Controller
{
  public function index_Action()
  {
    echo "Erster Controller";
  }

 public function test_Action()
  {
    echo "test";
  }
}

Action

Es gibt in diesem Controller 2 Actions: test und index. Index wird standartmäßig aufgerufen, wenn nichts anderes in der URL übergeben wurde.

Ruft jetzt einfach mal /Index/test.html auf. Wie man sieht, wird die methode test_Action ausgeführt.

Man kann beliebig viele Methoden definieren. Sie müssen aber alle public sein, falls sie nicht der internen Verarbeitung dienen. Außerdem müssen sie auf _Action enden.


FW_Controller

Jeder Controller MUSS von FW_Controller abgeleitet werden. Andere Klassen (die nicht von FW_Controller erben) werden nicht als gültig erkannt, da im FrontController folgendes steht:

 $controller = new $controller();
 if(FW_Controller::isValid($controller))

Es wird geprüft, ob der Controller zulässig ist. Wie diese Methode in FW_Controller aussieht, kommt jetzt.

/**
   * @access public
   * @param object controller
   * @return bool
   * Prüft, ob das übergebene Modul gültig ist und gibt je nach dem true oder false
   * zurück.
   */
  public static function isValid($controller)
  {
    return ($controller instanceof FW_Controller
            && is_callable(array($controller, 'index_Action')));
  }

Die Methode ist statisch, da sie nicht an ein Objekt gebunden sein muss. Sie prüft ja nur, ob der Controller alle Kriterien erfüllt!

Außerdem werden in FW_Controller abstrakte Methoden definiert:

/**
   * Diese Methode muss von jedem Controller implementiert werden.
   */
  abstract function index_Action();

Jeder Controller muss diese Methode überschreiben. Wird sie nicht überschrieben, bekommt man eine schöne PHP-Fehlermeldung zu sehen.

Es folgt die gesamte FW_Controller-Klasse:

/**
 * @author Simon H.
 * @version 1
 * @package MVC-Framework
 *
 * Die abstrakte Klasse kann nicht direkt instanziert werden.
 * Sie muss abgeleitet werden... (von einem Controller des Projekts)
 */
abstract class FW_Controller
{
  public function __construct()
  {
  }

  /**
   * @access public
   * @param object controller
   * @return bool
   * Prüft, ob das übergebene Modul gültig ist und gibt je nach dem true oder false
   * zurück.
   */
  public static function isValid($controller)
  {
    return ($controller instanceof FW_Controller
            && is_callable(array($controller, 'index_Action')));
  }

  /**
   * Diese Methode muss von jedem Controller implementiert werden.
   */
  abstract function index_Action();
}

Diese Datei muss Controller.class.php heißen und im Framework-Verzeichnis liegen.

Neue Seiten anlegen
Man kann jetzt ganz einfach neue Seiten anlegen, indem man eine neue Datei erstellt und die Actions programmiert.
Zum Test legen wir unter /netdevelopers/classes/Controller eine neue Datei namens Hallo.class.php an und schreiben folgenden Inhalt hinein:

class Controller_Hallo extends FW_Controller
{
  public function index_Action()
  {
    echo "Hi";
  }

  public function bye_Action()
  {
    echo "bye";
  }
}

Wenn man jetzt auf /Hallo/ bzw. /Hallo/bye.html geht, werden die entsprechenden Texte angezeigt.

Zugriffsberechtigungen
Natürlich will man früher oder später einen Login schreiben. Auch für einen Adminbereich werden Berechtigungen benötigt. Das wird später von einer seperaten Klasse erledigt.

Geplant ist ein MySQL-basiertes System, das aus der DB ausliest, ob ein bestimmter User Zugriff auf einen Controller bzw. eine Action hat. Es soll möglich sein, einen Controller komplett freizuschalten (Alle Methoden dürfen ausgeführt werden) oder nur Teile (nur bestimmte Methoden dürfen ausgeführt werden).

Zwischenstand und Download
Das Framework kann jetzt anhand der URL entscheiden, welcher Controller und welche Action ausgeführt wird. Es gibt noch keine Datenbankklasse (Model) und auch die Präsentationsschicht (View) fehlt noch. Doch das wird sich in den nächsten Kapiteln ändern.


Download: mvc-framework_01.zip (10kb)

Weiter geht’s
Im nächsten Kapitel geht es um nützliche Helfer, die View-Helper!

1 Star2 Stars3 Stars4 Stars5 Stars (Wurde noch nicht bewertet)
Loading...


9 Kommentare zu “Mein eigenes MVC-Framework: Der erste Controller und die Action-Methoden”

  1. […] Der erste Controller und die Action-Methoden […]

  2. […] Der erste Controller und die Action-Methoden · Gelesen: 19 · heute: 2 Ähnliche Beiträge   –  [Tutorial] Mein eigenes MVC-Framework: ArtikelübersichtAuszug: In meiner Artikelserie „Mein eigenes MVC-Framework“ geht es um die Entwicklung eines eigenen MVC-Frameworks in PHP. Diese Sei…  –  Sehr gute Einführung in die Entwicklung eines eigenen MVC-FrameworksAuszug: Ich habe hier einen sehr guten englischen Artikel über die Entwicklung eines eigenen MVC-Frameworks gefunden. Allemeine E…  –  TutorialsAuszug: Auf dieser Seite veröffentliche ich Links zu guten Tutorials. Manche befinden sich auf dieser Seite, manche auf externen. …  –  Mein eigenes MVC-Framework: Die Config-Klasse und die KonfigurationsmöglichkeitenAuszug: << Zurück zur Übersicht Die Config-Klasse ist dazu da, wichtige Einstellungen aus verschiedenen Quellen an einem z…  –  Mein eigenes MVC-Framework – Verzeichnisstruktur und __autoload()Auszug: << Zurück zur Übersicht Vorwort Ein wichtiges Kriterium bei der Entwicklung meines Frameworks ist die Wiederver… […]

  3. […] Klasse darin existiert, wird ein Objekt erzeugt. Danach wird geprüft, ob dieses Objekt gültig (Wie funktioniert FW_Controller::isValid()?) ist und wenn ja, geht es so weiter: Es wird geprüft, ob die angeforderte Aktion aufrufbar ist. […]

  4. […] habe das Tutorial jetzt um den Artikel über den Controller ergänzt. Es ist leider weiterhin nur ein Controller und eine Action möglich. Ich lasse mir da […]

  5. Ich habe das Script mal kurz überflogen und finde dieses noch sehr abstrakt. Erinnert mich irgendwie an Übungen für das Informatikstudium ohne einen direkten praktischen Bezug zu haben. Geschicht hätte ich es gefunden, wenn hier irgendwie eine Datenbankaktion mit verbunden wäre, beispielsweise das Ermitteln von Websitenbesuchen mit Ermittlung der entsprechenden Suchbegriffsphrase.

  6. Findest du den Code des Frameworks zu abstrakt oder den Beispielcode? Der Code des Frameworks muss ja abstrakt sein, das ist der Sinn des Frameworks 🙂

    Der Beispielcode ist nicht der beste, da hast du Recht. Bei Gelegenheit werde ich das mal beheben.

    MfG
    Simon

  7. Hi Simon,

    bin gerade über dein Framework „gestolpert“. Schaut gut aus. Aber – gibbet noch eine „Latest-Version“, wird dein FW noch weiter entwickelt.

    Ich hänge gerade am View-Teil bzw. der Aufgabe, wie welcher View von einem Controller zum Beispiel angesprochen wird.

    Sofern es hier noch Support gibt, wäre das echt super.

    MfG

  8. Hi,

    das Framework wird bei mir derzeit in 2 Projekten erfolgreich eingesetzt. Allerdings hat es seit der Erstellung mehrere größere Wandlungen mitgemacht. Es hat sich sehr viel geändert und das Tutorial stimmt mit dem jetztigen Code nicht mehr überein.

    Wenn du willst, schicke ich dir die aktuellste Version. Schreib mir einfach eine Mail an simon@net-developers.de 🙂

    MfG
    Simon

  9. Die aktuellste Version meines HMVC-Frameworks erhaltet ihr ab sofort immer hier: http://www.net-developers.de/blog/2011/02/13/download-info-shfw-hmvc-framework-in-php/

Hinterlasse einen Kommentar!

Time limit is exhausted. Please reload the CAPTCHA.

»Informationen zum Artikel

Autor: Simon
Datum: 20.10.2008
Zeit: 17:25 Uhr
Kategorien: Mein MVC-Framework
Gelesen: 18830x heute: 2x

Kommentare: RSS 2.0.
Diesen Artikel kommentieren oder einen Trackback senden.

»Meta