class XmlParser extends Parser

Der Parser lädt eine Route aus einer XML-Datei mit der Endung .xml. Der Aufbau der XML-Datei ist im folgenden beschrieben.

Default-Route

Über das Attribute default kann eine Route als Default definiert werden. Diese Route wird unabhängig vom Match ausgeführt, wenn keine andere Route passt. Werden mehrere Routen mit default ausgezeichnet ist das Ergebnis unbestimmt.

Wichtig: Bei einer Default-Route kann es bei falsch konfiguriertem Webserver zu einer Schleife kommen.

Gruppen

Jede Route in einer Gruppe bekommen eine Referenz auf die anderen Routen in der Gruppe. Diese Referenz definieren welche Methoden auf einen Entpunkt möglich sind. Außerdem könnenn auf Gruppenebene allgemeine Konfigurationen die für Routen übernommen werden sollen definiert werden.

Parameter

Die Parameter werden dem Presenter zur Verfügung gestellt.

Konfiguration

Erweiterte Konfigurationen können über den configuration-Tag an den entsprechenden Presenter weitergegeben werden.

Beispielkonfiguration

<definition>
    <routes>
        <group>
            <pattern><![CDATA[^/account$]]></pattern>
            <template>/account</template>

            <!-- Geschützte Account-Seite -->
            <route id="ACCOUNT">
                <method>GET</method>
                <presenter>\Alvine\Application\Web\Presenter\Page</presenter>
                <configuration>
                    <view>
                        <!-- Falls kein resourcepath angegeben wurde, liegt das Template unter
                             application\resource\template\alvine\application\web\presenter\page\default.min.html
                             Der gesamte Pfad wird durchsucht, so wird falls unter dem Ursprungspfad kein
                             Template zu finden ist der Reihe nach die Pfade
                             application\resource\template\alvine\application\web\view\default.min.html
                             application\resource\template\alvine\application\web\default.min.html
                             application\resource\template\alvine\application\default.min.html
                             application\resource\template\alvine\default.min.html
                             application\resource\template\default.min.html
                             usw bis zum Root-Verzeichnis durchsucht.
                        -->
                        <template>default.min</template>

                        <!-- Der Pfad zu den Templates kann
                             auch auch alternativ über das Argument
                             resourcepath angegeben werden
                        <template resourcepath="/var/resource/template/">default.min</template>
                        -->

                    </view>
                    <!-- Verlinkungen -->
                    <links>
                        <!-- URL einer Verlinkung -->
                        <link route="NEXT-ROUTE-ID" relation="info" label="i18n{info}"/>
                    </links>
                    <!-- Berechtigung die Seite anzuschauen -->
                    <accesscontrol>
                        <permission name="viewthis" class="\Alvine\Application\Web\Route\Permission">
                            <entity class="\Alvine\Security\Authentication\User">hans.mustermann</entity>
                            <entity class="\Alvine\Security\Authentication\Group">administrator</entity>
                            <entity class="\Alvine\Security\Authorization\Role">admin</entity>
                        </permission>
                    </accesscontrol>
                    <!-- Bearbeiten von Ausnahmeregeln -->
                    <exceptions>
                         <exceptions></exceptions>
                    </exceptions>
                    <containers>
                        <!-- Der Titel ist eine Locale -->
                        <container placeholder="title">
                            <content>i18n{account.title}</content>
                        </container>

                        <!-- Der Header wird statisch eingebunden -->
                        <container placeholder="header">
                            <content><![CDATA[<div class="row"><div class="col-md-12 col-lg-12 col-sm-12 col-xs-12"><div class="page-header"><img src="http://alvine.io/alvine.png" style="width:120px" class="img-responsive"></div></div></div>]]></content>
                        </container>

                        <!-- Die Navigation wird über ein Plugin integriert -->
                        <container placeholder="navigation">
                            <plugin class="\Alvine\Application\Web\Presenter\Page\Plugin\Navigation\Tree">
                                <navigation include="navigation/main.properties">
                                    <!-- Der Inhalt aus der Datei main.properties
                                    wird um diese Definition ergänzt.
                                    Achtung: Die Definitionen dürfen nicht
                                    den gleichen Key enthalten -->
                                    extra.1.url=http://alvine.io
                                    extra.1.label=alvine.io
                                </navigation>
                            </plugin>
                        </container>
                        <container placeholder="headline">
                            <content></content>
                        </container>

                        <container placeholder="content">
                            <content><![CDATA[Interner Bereich!]]></content>
                        </container>

                        <!-- Die Fußzeile ist wieder statisch -->
                        <container placeholder="footer">
                            <content><![CDATA[<hr>&copy; 1999 schukai GmbH]]></content>
                        </container>
                    </containers>

                    <!-- Umschreiben von Inhalten auf der Seite -->
                    <rewrite>
                        <rule>
                            <!-- Es finden die Regeln von \preg_replace Anwendung -->
                            <pattern><![CDATA[(&copy;) 1999]]></pattern>
                            <target>${1} 2015</target>
                        </rule>
                    </rewrite>
                </configuration>
            </route>
        </group>

    </routes>
</definition>

Properties

protected File $file from Parser
protected Directory $parsedRouteDirectory from Parser
protected Router $router from Parser

Methods

__construct(Collection $router, File $file)

RouteParser erstellen

from Parser
static Directory
getParsedRoutePath()

Standardpfad in dem die erstellten Routen abgelegt werden.

from Parser
$this
clear()

No description

from Parser
update()

Routingtabelle einlesen

static Parser
getParser(Router $router, File $file)

Parser bestimmen

from Parser
static Route
createRoute(Assembly $app, string $method, string $pattern, string $presenter, string $id, string $class = null)

Route erstellen

from Parser
File
writeParsedStructure(string $source, string $extension = null)

No description

from Parser
static ObjectMap
getParamterMap(NodeList $parameterNodes)

ObjectMap erstellen

array
getRouteFromXML(FileInputStream $file)

XML-Parsen

initExceptionHandling(Route $routeObject, Element $route)

Exceptions initialisieren

DefaultAccessControlList|null
getRouteAccessControlList(Route $routeObject, Element $route)

Zugangsberechtigung konfigurieren

NodeList
getRouteParameterMap(Route $routeObject, Element $route)

Parameterdefinition auslesen

NodeList
getRouteLinks(Route $routeObject, Element $route)

Links aus der Route auslesen

NodeList
getRouteConfiguration(Route $routeObject, Element $route)

Konfiguration auslesen

Details

in Parser at line 65
protected __construct(Collection $router, File $file)

RouteParser erstellen

Anhand der Dateierweiterung wird ein Router bestimmt und die übergebene Datei geparsed.

Parameters

Collection $router Router oder andere Routensammlung
File $file Routing-Datei

in Parser at line 82
static Directory getParsedRoutePath()

Standardpfad in dem die erstellten Routen abgelegt werden.

Return Value

Directory

in Parser at line 90
$this clear()

Return Value

$this

at line 226
Router update()

Routingtabelle einlesen

Diese Methode liesst eine Routingtabelle aus einer XML-Datei ein.

Return Value

Router Das Router-Objekt

Exceptions

ParseException Eintrag kann nicht gelesen werden
ClassNotFoundException Es wurde ein unbekannter Presenter definiert.
ConfigurationException

in Parser at line 121
static Parser getParser(Router $router, File $file)

Parser bestimmen

An der Dateierweiterung wird die Parser-Klasse bestimmt. Die Route test.xml wird durch den XmlParser verarbeitet.

Parameters

Router $router Router
File $file Name der Routing-Datei

Return Value

Parser Der zu verwendende Parser

Exceptions

RouteException Wenn kein Parser gefunden wurde

in Parser at line 151
static protected Route createRoute(Assembly $app, string $method, string $pattern, string $presenter, string $id, string $class = null)

Route erstellen

Parameters

Assembly $app HTTP-Verb (GET,POST,....)
string $method HTTP-Verb (GET,POST,....)
string $pattern URL-Muster
string $presenter Name der Presenter-Klasse
string $id ID der Route
string $class Name der Klasse (Standard \Alvine\Application\Web\Route)

Return Value

Route NeueRoute

Exceptions

ClassNotFoundException Klasse wurde nicht gefunden
TypeException Der Presentor ist nicht vom Typ Presentor

in Parser at line 163
protected File writeParsedStructure(string $source, string $extension = null)

Parameters

string $source
string $extension

Return Value

File

at line 187
static ObjectMap getParamterMap(NodeList $parameterNodes)

ObjectMap erstellen

Diese Methode erstellt eine ObjectMap von Parameter Objekten

<parameters>
  <parameter type="integer" name="name">myName</parameter>
  <parameter type="string" name="format">jpg</parameter>
</parameters>

Parameters

NodeList $parameterNodes Paramter Nodes

Return Value

ObjectMap ObjectMap mit Paramter Objekten

at line 259
protected array getRouteFromXML(FileInputStream $file)

XML-Parsen

Parameters

FileInputStream $file

Return Value

array

at line 337
protected XmlParser initExceptionHandling(Route $routeObject, Element $route)

Exceptions initialisieren

Parameters

Route $routeObject
Element $route

Return Value

XmlParser

Exceptions

RouteException

at line 404
protected DefaultAccessControlList|null getRouteAccessControlList(Route $routeObject, Element $route)

Zugangsberechtigung konfigurieren

Parameters

Route $routeObject
Element $route

Return Value

DefaultAccessControlList|null

at line 479
protected NodeList getRouteParameterMap(Route $routeObject, Element $route)

Parameterdefinition auslesen

Parameters

Route $routeObject
Element $route

Return Value

NodeList

Exceptions

ParseException

Links aus der Route auslesen

Parameters

Route $routeObject
Element $route

Return Value

NodeList

at line 520
protected NodeList getRouteConfiguration(Route $routeObject, Element $route)

Konfiguration auslesen

Parameters

Route $routeObject
Element $route

Return Value

NodeList