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>

Constants

SUBDIR

XPATH

Properties

protected File $file from Parser
protected Directory $parsedRouteDirectory from Parser
protected Collection $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(Collection $router, File $file)

Parser bestimmen

from Parser
static Route
createRoute(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, Map|null $globals = null)

Zugangsberechtigung konfigurieren

buildRouteAccessControlList(DefaultAccessControlList $accessList, NodeList $permissionNodes)

No description

ParameterMap
getRouteParameterMap(Route $routeObject, Element $route, Map|null $globals = null)

Parameterdefinition auslesen

NodeList
getRouteLinks(Route $routeObject, Element $route, Map|null $globals = null)

Links aus der Route auslesen

NodeList
getRouteConfiguration(Route $routeObject, Element $route, Map|null $globals = null)

Konfiguration auslesen

Details

in Parser at line 73
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 89
static Directory getParsedRoutePath()

Standardpfad in dem die erstellten Routen abgelegt werden.

Return Value

Directory

in Parser at line 97
$this clear()

Return Value

$this

at line 232
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 128
static Parser getParser(Collection $router, File $file)

Parser bestimmen

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

Parameters

Collection $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 158
static protected Route createRoute(string $method, string $pattern, string $presenter, string $id, string $class = null)

Route erstellen

Parameters

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 180
protected File writeParsedStructure(string $source, string $extension = null)

Parameters

string $source
string $extension

Return Value

File

at line 193
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 265
protected array getRouteFromXML(FileInputStream $file)

XML-Parsen

Parameters

FileInputStream $file

Return Value

array

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

Exceptions initialisieren

Parameters

Route $routeObject
Element $route

Return Value

XmlParser

Exceptions

RouteException

at line 423
protected DefaultAccessControlList|null getRouteAccessControlList(Route $routeObject, Element $route, Map|null $globals = null)

Zugangsberechtigung konfigurieren

Parameters

Route $routeObject
Element $route
Map|null $globals

Return Value

DefaultAccessControlList|null

Exceptions

ParseException
UnsupportedException
ConfigurationException

at line 463
protected XmlParser buildRouteAccessControlList(DefaultAccessControlList $accessList, NodeList $permissionNodes)

Parameters

DefaultAccessControlList $accessList
NodeList $permissionNodes

Return Value

XmlParser

Exceptions

ParseException
UnsupportedException
ConfigurationException

at line 540
protected ParameterMap getRouteParameterMap(Route $routeObject, Element $route, Map|null $globals = null)

Parameterdefinition auslesen

Es werden zuerst die Globalen (in der Gruppe gesetzten Parameter ausgelesen und gesetzt. Danach werden die Routenparameter gesetzt.

Parameters

Route $routeObject
Element $route
Map|null $globals

Return Value

ParameterMap

Exceptions

ParseException

Links aus der Route auslesen

Parameters

Route $routeObject
Element $route
Map|null $globals

Return Value

NodeList

at line 612
protected NodeList getRouteConfiguration(Route $routeObject, Element $route, Map|null $globals = null)

Konfiguration auslesen

Parameters

Route $routeObject
Element $route
Map|null $globals

Return Value

NodeList