Framework: Anwendungen mit Datenbankanbindung

Ein einfaches Beispiel für eine einfache Anwendung die jedoch trotz Einfachheit alle Anforderungen abdeckt

Sinn und Zweck eines Frameworks bestehen unter Anderem darin, Anwendungen mit gut verständlichen und wenigen Code Zeilen erstellen zu können. Und zwar so, daß man das schon mit ein paar Grundkenntnissen tun und sich dabei auf das Wesentliche konzentrieren kann. Untenstehender Code ist dafür ein verständliches Beispiel.

Das unter diesem kleinen Stück Code liegende Framework deckt sämtliche Fehlerfälle ab. Zum Beispiel würde das Nicht Zustandekommen der Verbindung zur Datenbank eine Exception werfen {RaiseError => 1}. Die Exception wird aufgefangen und dem Anwender eine entsprechende Fehlermeldung im Browser ausgegeben.

Optional erlaubt untenstehender Code den Einbau des Abfrageergebnisses in beliebige HTML Seiten wobei der Request zur Anfrage an die Datenbank per AJAX oder FetchAPI erfolgt. Hierzu wird ein spezieller Custom Request Header gesetzt.

Das Abfrageergebnis wird in einer für die Templating Engine verständlichen Datenstruktur geliefert womit eine HTML Tabelle in den Browser gerendert wird.

use strict;
use warnings;
use JSON;

sub init{
    my $self = shift;

    # Verbindung zur DB herstellen
    # der Name der DB ist konfiguriert
    my $dbh = $self->dbh( $self->eav('base') );

    # Einfache Abfrage der Top 30
    my $q   = q(
        SELECT url, count(url) as cnt
        FROM log group by url
        order by cnt desc limit 30
    );

    # Abfrageergebnis zum Rendern ins Template bereitstellen
    $self->{STASH}{slice} = $dbh->selectall_arrayref($q, { Slice => {}});

    # optionaler Ajax Request
    if( $ENV{HTTP_X_SHORTSTAT} ){
        my $j = JSON->new;
        return $self->{CONTENT}  = $j->encode($self->{STASH}{slice});
    }
}
1;#########################################################################
__DATA__

<!-- ~~~~~~~~~~~~~~~~~~~~~~HTML Template ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<h2>Die Top-30 unter den Seitenaufrufen</h2>

<table class="grid">
    <thead>
      <tr>
        <th>URL</th>
        <th>Aufrufe</th>
      </tr>
    </thead>
    <tbody>
    %loop_slice%
        <tr>
            <td>%url%</td>
            <td>%cnt%</td>
        </tr>
    %endloop%
    </tbody>
</table>

Anmerkung: Ein Template für die TE HTML::Template sähe nur betreffend der Platzhalter geringfügig anders aus. Ansonsten werden die Namen der Platzhalter vom SQL Statement bis ins Template unverändert durchgereicht, dem entgegen kommt ja die Möglichkeit, mit Alias arbeiten zu dürfen. Weitere Spalten sind so im Handumdrehen hinzugefügt.

Top 30 Statistik


Die rein persönlichen Zwecken dienende Seite verwendet funktionsbedingt einen Session-Cookie. Datenschutzerklärung: Auf den für diese Domäne installierten Seiten werden grundsätzlich keine personenbezogenen Daten erhoben. Das Loggen der Zugriffe mit Ihrer Remote Adresse erfolgt beim Provider soweit das technisch erforderlich ist. @: Rolf Rost, Am Stadtgaben 27, 55276 Oppenheim, nmq​rstx-18­@yahoo.de